我有以下内容:
@Singleton
public class A {
@Inject
private B b;
@PostConstruct
void initialize(){
b.someMethod();
}
}
@Singleton
public class B {
}
我们可以确定B总会在A之前注入吗?
答案 0 :(得分:2)
来自EJB 3.1规范的§4.8.1:
在某些情况下,应用程序中的多个Singleton组件之间存在显式初始化排序依赖关系。 DependsOn注释用于表示这些依赖关系。 DependsOn依赖项用于一个Singleton必须在一个或多个其他Singletons之前初始化的情况。容器确保在调用PostConstruct之前已初始化与Singleton具有DependsOn关系的所有Singleton bean。
请注意,如果一个Singleton只需要从其PostConstruct方法调用另一个Singleton,则不需要显式的排序元数据。在这种情况下,第一个Singleton只会使用ejb引用来调用目标Singleton。在那里,ejb引用的获取(通过注入或查找)并不一定意味着实际创建相应的Singleton bean实例。
...