「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。
Spring生命周期注解之@PostConstruct
前文
在通常的开发过程中,经常会遇到这样的一种问题:在程序启动时需要进行数据的初始化设置。而在springboot的框架应用场景下,也有这样的一个注解@PostConstruct。这个注解会在bean加载的过程中,落后于构造函数执行,因此也就可以达到该目的。
具体内容
The PostConstruct annotation is used on a method that needs to be executed
after dependency injection is done to perform any initialization.
正如该注解在源码中的描述一样,这个注解需要作用在方法上,而这个方法要在初始化的依赖全部注入后执行。也就是说,该注解所对应的执行顺序是指在所有的依赖全部加载后执行,同时在构造方法执行后进行执行。下面简单来看一个示例:
@Component
public class PostUtil {
@Autowired
ProductService productService;
public PostUtil() {
System.out.println("构造方法初始化");
System.out.println(productService == null);
}
@PostConstruct
public void init(){
System.out.println("@PostConstruct注解初始化");
System.out.println(productService == null);
}
}
这段示例代码的执行结果如下所示。首先可以看到构造函数会优先执行,此时注入的内容还没有成功注入。然后紧接着该注解修饰的方法会进行执行,此时注入的内容已经被执行完毕。如执行结果可见,此时 注入的内容已经可以正常执行,也就是可以继续下一步的初始化工作。
同时,上述的执行结果也就解释了可能存在的疑问:为什么我们要使用该注解,而不是直接在bean初始化阶段直接进行所需要的预处理操作。初始化阶段注入的内容并没有处理完成,直接在构造函数初始化阶段操作,会存在空指针的问题导致程序执行异常。而上述注解充分考虑了这个问题,因此要采用这个方案。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。