我的 JEE 应用程序中有 2 个单例,我想在启动时对其进行初始化。像这样:
@Singleton
@Startup
public class ServiceB {
@EJB
private ServiceA a;
@PostConstruct
private void init() {
....
}
}
ServiceB 并不真正需要 ServiceA,我只是添加了依赖项以确保 ServiceA 在 ServiceB 的 init() - 方法开始之前完全初始化(阅读:@PostConstruct-method finished)。
但它不会等待。 ServiceB 实际上在ServiceA 之前启动。
有没有办法确保一个 Bean 的 @PostConstruct- 方法等待另一个 Bean 的 @PostConstruct- 方法完成?
我知道我可以删除 ServiceA 中的 @PostConstruct 注解并直接从 ServiceB 调用它
@PostConstruct init() {
a.init();
}
但我有没有 ServiceB 的部署。所以我不能依赖 ServiceB 来初始化 ServiceA。 ServiceA 必须自己做。 ServiceB 必须等待 ServiceA 完成它。
最佳答案
使用 @DependsOn注释以声明对启动 bean 的初始化依赖性。
例子:
@Singleton
@Startup
public class ServiceA {
@PostConstruct
public void init() { ... }
}
@Singleton
@Startup
@DependsOn("ServiceA")
public class ServiceB {
@EJB
ServiceA a;
@PostConstruct
public void init() { ... } // will be called after a is initialized
}
关于java - @PostConstruct 的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46393645/