Spring原始碼解讀之——bean的生命週期(隨筆)
bean建立---初始化----銷燬的過程
容器管理bean的生命週期;
我們可以自定義初始化和銷燬方法;容器在bean進行到當前生命週期的時候來呼叫我們自定義的初始化和銷燬方法
構造(物件建立)
單例項:在容器啟動的時候建立物件
多例項:在每次獲取的時候建立物件\
BeanPostProcessor.postProcessBeforeInitialization
初始化:
物件建立完成,並賦值好,呼叫初始化方法。。。
BeanPostProcessor.postProcessAfterInitialization
銷燬:
單例項:容器關閉的時候
多例項:容器不會管理這個bean;容器不會呼叫銷燬方法;
遍歷得到容器中所有的BeanPostProcessor;挨個執行beforeInitialization,
一但返回null,跳出for迴圈,不會執行後面的BeanPostProcessor.postProcessorsBeforeInitialization
BeanPostProcessor原理
populateBean(beanName, mbd, instanceWrapper);給bean進行屬性賦值
initializeBean
{
applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
invokeInitMethods(beanName, wrappedBean, mbd);執行自定義初始化
applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
}
1)、指定初始化和銷燬方法;
通過@Bean指定init-method和destroy-method;
2)、通過讓Bean實現InitializingBean(定義初始化邏輯),
DisposableBean(定義銷燬邏輯);
3)、可以使用JSR250;
@PostConstruct:在bean建立完成並且屬性賦值完成;來執行初始化方法
@PreDestroy:在容器銷燬bean之前通知我們進行清理工作
4)、BeanPostProcessor【interface】:bean的後置處理器;
在bean初始化前後進行一些處理工作;
postProcessBeforeInitialization:在初始化之前工作
postProcessAfterInitialization:在初始化之後工作
Spring底層對 BeanPostProcessor 的使用;
bean賦值,注入其他元件,@Autowired,生命週期註解功能,@Async,xxx BeanPostProcessor;