2

Jodd 框架是否提供机制来为其他框架创建的对象注入 petitebeans 引用。

以下是场景
- 域/服务对象由 Spring 框架
创建 - 域对象由 ORM 框架创建
- 这些对象需要注入 Repository/DAO 对象(通过 AutomagicPetiteConfigurator 注册为 PetiteBean 的单例对象)


下面是示例代码,在小容器关闭后,调用 pc.getBean(Greetings.class).message(null) 时调用 initMethod() 而没有调用 destroyMethod(),请指出我做错了什么?

@PetiteBean("greetings")
public class EnglishGreetings implements Greetings {

    @Override
    public String message(String message) {

        if (message == null) {
            return "defaultMessage";
        }
        return message;
    }

    @PetiteInitMethod
    public void initMethod() {
        System.out.println("Entered initMethod");
    }

    @PetiteDestroyMethod
    public void destroyMethod() {
        System.out.println("Entered destroyMethod");
    }
}

public class GreetingRunner {
    final static Logger logger = LoggerFactory.getLogger(GreetingRunner.class);

    @PetiteInject
    public Greetings greetings;

    public static void main(String s[]) {

        jodd.log.LoggerFactory.setLoggerFactory(new Slf4jLoggerFactory());

        PetiteContainer pc = new PetiteContainer();
        AutomagicPetiteConfigurator configurator = new AutomagicPetiteConfigurator();
        configurator.setIncludedEntries("com.rans.*");
        configurator.configure(pc);
        pc.shutdown();
        System.out.println(pc.getBean(Greetings.class).message(null));
    }
}
4

1 回答 1

0

由于 Petite 的惰性方面,没有调用销毁方法- 如果没有使用 bean,则不会调用任何销毁方法。这同样适用于 init 方法。如果不使用 bean,Petite simple 会忽略它。

现在回到问题:

Jodd 框架是否提供机制来为其他框架创建的对象注入 petitebeans 引用。

从技术上讲,是的 - 如果你覆盖它:) 见PetiteProxettaContainer。您可以覆盖getBean并使用 3rd 方容器来获取 bean。实际上,您可以覆盖createBeanDefinitionForRegistration在不同容器中注册 bean 的方法。老实说,我们可能会让这一点更明显:)

(抱歉迟了回应)

于 2016-05-02T15:47:25.783 回答