java - Spring Bean 初始化顺序

标签 java spring

我有两个 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/

相关文章:

java - 文件已以错误的编码加载:android studio中的 'UTF-8'

java - 如何通过多个页面保存一个对象

spring - 开始使用 Spring 框架

java - SQL 连接问题

java - 在 Java 中将整数、 double 转换为字符串

javax.persistence.PersistenceException : No Persistence provider for EntityManager named

Java-servlet和客户端之间的通信

java - Spring状态机在uml中定义选择状态

java - 即使调试正常,Hibernate 也不删除对象?

java - 如果某些属性无效,Spring Boot 中的应用程序启动失败