spring bean初始化顺序
转自http://markey.cc/2018/11/04/SpringBoot%E4%B8%AD%E7%9A%84Bean%E5%88%9D%E5%A7%8B%E5%8C%96%E6%96%B9%E6%B3%95%E2%80%94%E2%80%94-PostConstruct/
注解说明
- 使用注解: @PostConstruct
- 效果:在Bean初始化之后(构造方法和@Autowired之后)执行指定操作。经常用在将构造方法中的动作延迟。
- 备注:Bean初始化时候的执行顺序: 构造方法 -> @Autowired -> @PostConstruct
引入步骤
在自定义的bean初始化方法上加上@PostConstruct
示例代码
注解示例
1
|
import org.springframework.stereotype.Component;
|
常见问题
在Bean的初始化操作中,有时候会遇到调用其他Bean的时候报空指针错误。这时候就可以将调用另一个Bean的方法这个操作放到@PostConstruct注解的方法中,将其延迟执行。
例如:我们想要在MyPostConstruct方法初始化时调用YourPostConstruct的方法,于是就在MyPostConstruct的构造方法中加入了初始化操作,此时Spring启动会报错。
原因:MyPostConstruct调用YourPostConstruct的方法时,YourPostConstruct这个Bean还没有初始化完成。
解决方案:将初始化操作放到@PostConstruct注解的方法中,这样就能保证在调用方法时Bean已经初始化完成。
错误示例
1
|
import org.springframework.beans.factory.annotation.Autowired;
|
1
|
import org.springframework.stereotype.Component;
|
正确示例
1
|
import org.springframework.beans.factory.annotation.Autowired;
|