我們可以自定義bean的初始化和銷毀方法,這裡所指的的初始化和bean的構造不同,初始化是在bean構造完成後,對bean內部的屬性或一些邏輯進行初始化。 首先要弄清一些概念: 構造(對象創建) 單實例:在容器啟動時創建對象 多實例:在每次獲取的時候創建對象 初始化:在對象創建後調用 銷毀: 單實例 ...
我們可以自定義bean的初始化和銷毀方法,這裡所指的的初始化和bean的構造不同,初始化是在bean構造完成後,對bean內部的屬性或一些邏輯進行初始化。
首先要弄清一些概念:
- 構造(對象創建)
- 單實例:在容器啟動時創建對象
- 多實例:在每次獲取的時候創建對象
- 初始化:在對象創建後調用
- 銷毀:
- 單實例:在容器關閉時執行銷毀方法
- 多實例:容器不會管理,不會調用銷毀方法
下麵提供幾種方法供參考
一、指定初始化和銷毀方法
在配置類中,我們可以通過@Bean指定initMethod 和destroyMethod ,分別指向類中的初始化和銷毀方法。
二、實現InitializingBean和DisposableBean
實現介面中的InitializingBean(定義初始化邏輯)和destroy(定義銷毀邏輯)方法即可。
三、通過@PostConstruct和@PreDestroy註解
在初始化和銷毀方法上分別添加@PostConstruct和@PreDestroy註解,這樣就能給Bean實現初始化和銷毀。
四、實現後置處理器BeanPostProcessor介面
這裡的兩個方法postProcessBeforeInitialization和postProcessAfterInitialization,分別會在初始化前和初始化後執行。
實現邏輯:
BeanFactory在創建bean時,會先調用initializeBean方法進行初始化,併在初始化前獲取到所有後置處理器,並執行後置處理器的postProcessBeforeInitialization方法。
執行完所有後置處理器的postProcessBeforeInitialization方法後,接著BeanFactory將執行完初始化。
初始化完成後,繼續獲取所有的後置處理器,迴圈執行所有的postProcessAfterInitialization方法。
方法三的實現邏輯也是通過後置處理器來完成的。
在執行postProcessBeforeInitialization時,會掃描標註有@PostConstruct註解的方法的類,最終定位到對應方法並執行。