我們可以自定義bean的初始化和銷毀方法,這里所指的的初始化和bean的構造不同,初始化是在bean構造完成后,對bean內部的屬性或一些邏輯進行初始化。
首先要弄清一些概念:
- 構造(對象創建)
- 單實例:在容器啟動時創建對象
- 多實例:在每次獲取的時候創建對象
- 初始化:在對象創建后調用
- 銷毀:
- 單實例:在容器關閉時執行銷毀方法
- 多實例:容器不會管理,不會調用銷毀方法
下面提供幾種方法供參考
一、指定初始化和銷毀方法
在配置類中,我們可以通過@Bean指定initMethod 和destroyMethod ,分別指向類中的初始化和銷毀方法。
二、實現InitializingBean和DisposableBean
實現接口中的InitializingBean(定義初始化邏輯)和destroy(定義銷毀邏輯)方法即可。
三、通過@PostConstruct和@PreDestroy注解
在初始化和銷毀方法上分別添加@PostConstruct和@PreDestroy注解,這樣就能給Bean實現初始化和銷毀。
四、后置處理器及其原理
后置處理器含義如下兩個方法postProcessBeforeInitialization和postProcessAfterInitialization,分別會在初始化前和初始化后執行。


實現邏輯
BeanFactory在創建bean時,會先調用initializeBean方法進行初始化,並在初始化前獲取到所有后置處理器,並執行后置處理器的postProcessBeforeInitialization方法。
執行完所有后置處理器的postProcessBeforeInitialization方法后,接着BeanFactory將執行完初始化。
初始化完成后,繼續獲取所有的后置處理器,循環執行所有的postProcessAfterInitialization方法。
方法三的實現邏輯也是通過后置處理器來完成的。
在執行postProcessBeforeInitialization時,會掃描標注有@PostConstruct注解的方法的類,最終定位到對應方法並執行。
