使用註解管理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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章