【问题标题】:Singleton injection order单例注入顺序
【发布时间】:2015-05-12 00:32:48
【问题描述】:

我有以下几点:

@Singleton
public class A {
   @Inject
   private B b;

   @PostConstruct
   void initialize(){
     b.someMethod();
   }
}

@Singleton
public class B {

}

我们能确定 B 总是在 A 之前被注入吗?

【问题讨论】:

    标签: jakarta-ee dependency-injection singleton ejb ejb-3.0


    【解决方案1】:

    来自 EJB 3.1 规范的 §4.8.1:

    在某些情况下,应用程序中的多个 Singleton 组件之间存在显式的初始化排序依赖关系。 DependsOn 注解用于表达这些依赖关系。 DependsOn 依赖项用于一个 Singleton 必须在一个或多个其他 Singleton 之前初始化的情况。容器确保与 Singleton 具有 DependsOn 关系的所有 Singleton bean 在调用 PostConstruct 之前都已初始化。

    请注意,如果一个 Singleton 只需要从其 PostConstruct 方法调用另一个 Singleton,则不需要显式排序元数据。在这种情况下,第一个 Singleton 将仅使用 ejb 引用来调用目标 Singleton。在那里,ejb 引用的获取(通过注入或查找)并不一定意味着相应的 Singleton bean 实例的实际创建。

    ...

    【讨论】:

    • 不错。所以,就我而言,不需要@DependsOn。
    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多