1. 程式人生 > >Spring原始碼解讀之——bean的生命週期(隨筆)

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;