Bean生命週期註解大致有這麼多,創建並註冊Bean,bean初始化與銷燬,以及scope、conditional、primary、lazy等註解。
bean的初始化與銷燬
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等功能的實現,很重要。
以ApplicationContextAware爲例分析,給賦值位置打斷點,查看堆棧。