【问题标题】:Does Jodd framework provide mechanism to inject petitebeans references for objects created by other frameworksJodd 框架是否提供机制来为其他框架创建的对象注入 petitebeans 引用
【发布时间】:2016-04-22 21:43:22
【问题描述】:

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));
    }
}

【问题讨论】:

  • 你为什么用getBean调用pc.shutdown();之前
  • @игор, Intent to call pc.shutdown() 是为了检查以下内容 - 是否会调用带有 PetiteDestroyMethod 注释标记的 destroyMethod() 并且在 Petite Container 关闭后无法访问 Beans
  • 请标记正确答案。

标签: jodd


【解决方案1】:

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

现在回到问题:

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

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

(抱歉回复晚了)

【讨论】:

  • 调用PetiteContainer的shutdown()方法后,能否将PetiteContainer配置为尝试通过PetiteContainer getBean APIs访问bean时抛出异常
  • 嘿@NRV,在 3.7.1 中我们将删除所有 bean 数据。这对你有用吗 - 而不是抛出异常?
  • 对于其他人,请随时 @NRV 标记已回答的问题
猜你喜欢
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2022-11-02
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 2011-03-27
相关资源
最近更新 更多