Spring Bean Init Order

nab*_*aba 1 java spring

我有两个Spring Beans如下:

@Service
public class A{
}

@Service
public class B{
   @Autowired A a;

   public B(){
      a.doSomething();
   }
Run Code Online (Sandbox Code Playgroud)

问题是不能保证A早于B初始化.因此我将在B()中得到一个NullPointerException.

无论如何,我可以在Spring中指定这种依赖吗?

iva*_*tod 6

Spring框架中的任何自动装配都将构造bean 之后发生.因此,无法使用构造函数本身的自动装配成员(如Autowired javadoc页面中所示).您可以选择将注释放在构造函数本身上,并使其接受另一个bean作为参数,然后工作:

@Service
public class B {

  @Autowired
  public B(A a) {
     a.doSomething();
  }
}
Run Code Online (Sandbox Code Playgroud)

或者@PostConstruct在单独的方法上使用注释,该方法将保证在构造bean之后执行,并且所有引用都将正确连接:

@Service
public class B{

  @Autowired
  A a;

  @PostConstruct
  public moreSetup() {
     a.doSomething();
  }
}
Run Code Online (Sandbox Code Playgroud)