我有两个 Spring Bean,如下所示:
@Service
public class A{
}
@Service
public class B{
@Autowired A a;
public B(){
a.doSomething();
}
问题是不能保证 A 比 B 更早初始化。所以我会在 B() 中得到 NullPointerException。
无论如何,我可以在 Spring 中指定这种依赖关系吗?
最佳答案
Spring 框架中的任何 Autowiring 都将在 bean 构建之后发生。因此,不可能使用构造函数本身的 Autowiring 成员(如 Autowired javadoc page 中所示)。您的选择是将注释放在构造函数本身上,并使其接受另一个 bean 作为参数,然后它将起作用:
@Service
public class B {
@Autowired
public B(A a) {
a.doSomething();
}
}
或者在单独的方法上使用 @PostConstruct
注释,该方法将保证在构造 bean 后执行,并将正确连接所有引用:
@Service
public class B{
@Autowired
A a;
@PostConstruct
public moreSetup() {
a.doSomething();
}
}
关于java - Spring Bean 初始化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403947/