使用注解管理spring bean生命周期

Bean生命周期注解大致有这么多,创建并注册Bean,bean初始化与销毁,以及scope、conditional、primary、lazy等注解。
image
bean的初始化与销毁
image

BeanPostProcessor工作原理

我们给自定义的postProcessBeforeInitialization方法打上断点,debug执行,通过IDEA拿到方法调用栈。分析如下

// 初始化属性
populateBean(beanName, mbd, instanceWrapper); 
exposedObject = initializeBean(beanName, exposedObject, mbd) {
	invokeAwareMethods(beanName, bean);// BeanAware方法
	applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName); // 初始化前执行
	invokeInitMethods(beanName, wrappedBean, mbd); // 初始化bean-->内部会执行init方法。
	applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName); // 初始化后执行
}

Spring内部对BeanPostProcessor很广泛的应用。例如bean的赋值、将容器注入到bean、@Autowired、生命周期注解@PostConstruct、@Async等功能的实现,很重要。
image

以ApplicationContextAware为例分析,给赋值位置打断点,查看堆栈。

image

image

posted @ 2022-03-04 08:01  Awecoder  阅读(219)  评论(0编辑  收藏  举报