国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

深入剖析Spring(三)——Bean的生命周期

2019-11-08 03:15:34
字體:
供稿:網(wǎng)友

對于普通的java對象,當new的時候創(chuàng)建對象,當它沒有任何引用的時候被垃圾回收機制回收。而由SPRing IoC容器托管的對象,它們的生命周期完全由容器控制。Spring中每個Bean的生命周期如下:

title

1. 實例化Bean

對于BeanFactory容器,當客戶向容器請求一個尚未初始化的bean時,或初始化bean的時候需要注入另一個尚未初始化的依賴時,容器就會調(diào)用createBean進行實例化。 對于applicationContext容器,當容器啟動結(jié)束后,便實例化所有的bean。 容器通過獲取BeanDefinition對象中的信息進行實例化。并且這一步僅僅是簡單的實例化,并未進行依賴注入。 實例化對象被包裝在BeanWrapper對象中,BeanWrapper提供了設置對象屬性的接口,從而避免了使用反射機制設置屬性。

2. 設置對象屬性(依賴注入)

實例化后的對象被封裝在BeanWrapper對象中,并且此時對象仍然是一個原生的狀態(tài),并沒有進行依賴注入。 緊接著,Spring根據(jù)BeanDefinition中的信息進行依賴注入。 并且通過BeanWrapper提供的設置屬性的接口完成依賴注入。

3. 注入Aware接口

緊接著,Spring會檢測該對象是否實現(xiàn)了xxxAware接口,并將相關(guān)的xxxAware實例注入給bean。

4. BeanPostProcessor

當經(jīng)過上述幾個步驟后,bean對象已經(jīng)被正確構(gòu)造,但如果你想要對象被使用前再進行一些自定義的處理,就可以通過BeanPostProcessor接口實現(xiàn)。 該接口提供了兩個函數(shù):

postProcessBeforeInitialzation( Object bean, String beanName ) 當前正在初始化的bean對象會被傳遞進來,我們就可以對這個bean作任何處理。 這個函數(shù)會先于InitialzationBean執(zhí)行,因此稱為前置處理。 所有Aware接口的注入就是在這一步完成的。

postProcessAfterInitialzation( Object bean, String beanName ) 當前正在初始化的bean對象會被傳遞進來,我們就可以對這個bean作任何處理。 這個函數(shù)會在InitialzationBean完成后執(zhí)行,因此稱為后置處理。

5. InitializingBean與init-method

當BeanPostProcessor的前置處理完成后就會進入本階段。 InitializingBean接口只有一個函數(shù):

afterPropertiesSet()

這一階段也可以在bean正式構(gòu)造完成前增加我們自定義的邏輯,但它與前置處理不同,由于該函數(shù)并不會把當前bean對象傳進來,因此在這一步?jīng)]辦法處理對象本身,只能增加一些額外的邏輯。 若要使用它,我們需要讓bean實現(xiàn)該接口,并把要增加的邏輯寫在該函數(shù)中。然后Spring會在前置處理完成后檢測當前bean是否實現(xiàn)了該接口,并執(zhí)行afterPropertiesSet函數(shù)。

當然,Spring為了降低對客戶代碼的侵入性,給bean的配置提供了init-method屬性,該屬性指定了在這一階段需要執(zhí)行的函數(shù)名。Spring便會在初始化階段執(zhí)行我們設置的函數(shù)。init-method本質(zhì)上仍然使用了InitializingBean接口。

6. DisposableBean和destroy-method

和init-method一樣,通過給destroy-method指定函數(shù),就可以在bean銷毀前執(zhí)行指定的邏輯。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 沁水县| 屏东市| 上杭县| 新津县| 天峨县| 寻乌县| 汪清县| 江华| 舟山市| 深水埗区| 兴文县| 荆门市| 同仁县| 固阳县| 多伦县| 京山县| 治县。| 贵州省| 平凉市| 昌邑市| 南康市| 精河县| 盐亭县| 宁南县| 铁力市| 高邮市| 师宗县| 洛南县| 铜陵市| 恩平市| 正宁县| 肇州县| 永康市| 全州县| 衡东县| 日照市| 奈曼旗| 丰县| 永州市| 松原市| 栾川县|