Spring Bean 生命周期之BeanFactory

???????? 在 Spring 中廉赔,可以從兩個(gè)方面來(lái)定義Bean的生命周期:(1)Bean 的作用域(2)實(shí)例化Bean 時(shí)所經(jīng)歷的一系列階段,下面我們可以從 BeanFactory 與 ApplicationContext來(lái)分析 Bean 的生命周期玉组。

先放上一張圖片,我們來(lái)看看 BeanFactory 中 Bean 完整的生命周期過(guò)程。

BeanFactory 中 Bean 生命周期

具體分析過(guò)程如下:

(1)如果容器實(shí)現(xiàn)了 org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor 接口(實(shí)際上最終是實(shí)現(xiàn) BeanPostProcessor 接口)设哗,那么我們?cè)?getBean( ) 向容器中請(qǐng)求得到某個(gè)Bean時(shí)柳弄,會(huì)先進(jìn)入 postProcessBeforeInstantiation( ) 方法舶胀。作用: 執(zhí)行Bean 的修改操作概说。

(2)根據(jù)配置情況,選擇使用 Bean 的構(gòu)造函數(shù)或者工廠方法來(lái)實(shí)例化 Bean嚣伐。

(3)接下來(lái)會(huì)執(zhí)行到 InstantiationAwareBeanPostProcessor 接口中 postProcessAfterInstantiation( ) 方法糖赔,可以執(zhí)行Bean的修改操作。

(4)如果我們?cè)谂渲梦募性O(shè)定了Bean的屬性信息轩端,那么容器將執(zhí)行InstantiationAwareBeanPostProcessor 接口中 postProcessPropertyValues( ) 方法放典,為設(shè)置每一個(gè)屬性做準(zhǔn)備,注意:設(shè)置每一個(gè)屬性之前都會(huì)調(diào)用此方法基茵。

(5)調(diào)用 Bean 的 setter 方法設(shè)置屬性值奋构。

(6)給 Bean 設(shè)置在配置文件中設(shè)定好的名稱。方法是:實(shí)現(xiàn) BeanFactoryAware 接口拱层,利用 setBeanName( ) 方法設(shè)置弥臼。

(7)將 BeanFactory 實(shí)例設(shè)定到 Bean 中。方法是:實(shí)現(xiàn) BeanFactoryAware 接口根灯,利用 setBeanFactory( ) 方法設(shè)置径缅。

(8)如果容器實(shí)現(xiàn)了 org.springframework.beans.factory.config.BeanPostProcessor 接口,那么將調(diào)用 BeanPostProcessor 中的 Object postProcessBeforeInitialization (Object bean,String beanName) 方法對(duì) Bean 進(jìn)行相關(guān)操作箱吕。其中 bean 為當(dāng)前正在處理的 Bean芥驳,beanName為當(dāng)前 Bean 配置名。我們可以通過(guò) BeanPostProcessor 接口 實(shí)現(xiàn)對(duì) Spring 的 AOP茬高,動(dòng)態(tài)代理等兆旬。

(9)如果 Bean 實(shí)現(xiàn)了 InitializingBean 接口,那么將調(diào)用 afterPropertiesSet() 方法怎栽。

(10)如果在配置文件中設(shè)定了 init-method 屬性丽猬,那么將會(huì)調(diào)用這個(gè)初始方法。

(11)調(diào)用 BeanPostProcessor 中的 Object postProcessAfterInitialization (Object bean,String beanName) 方法再次對(duì) Bean 進(jìn)行相關(guān)操作熏瞄。

(12)如果將 Bean 的作用域設(shè)定為 singleton脚祟,那么容器會(huì)將 Bean 放入緩存池中,將 Bean 的引用返回給調(diào)用者强饮,Spring 繼續(xù)負(fù)責(zé)這些 Bean 后續(xù)的生命周期管理由桌;若作用域設(shè)定為 prototype那么Spring 不負(fù)責(zé)這些 Bean 后續(xù)的生命周期管理,直接將Bean返回給調(diào)用者邮丰,讓調(diào)用者負(fù)責(zé)管理行您。

(13)對(duì)于作用域設(shè)定為 singleton 的 Bean,當(dāng)容器關(guān)閉時(shí)剪廉,將觸發(fā)Spring 對(duì) Bean 后續(xù)的生命周期管理娃循,如果 Spring 實(shí)現(xiàn)了 DisposableBean 接口,那么將執(zhí)行接口的 destory( ) 方法斗蒋,在這里可以編寫(xiě)釋放資源捌斧,記錄日志等操作笛质。

(14)如果我們指定了 Bean 的 destroy-method 方法,那么 Spring 將執(zhí)行這個(gè)方法捞蚂,完成釋放資源妇押。

Spring 容器實(shí)例化 Bean ,調(diào)用 Bean 洞难,以及銷(xiāo)毀 Bean 都涉及到了特定的方法舆吮,可以大致將這些方法分成四類(lèi)。

(1)Bean 自身的方法:Bean 的構(gòu)造函數(shù)實(shí)例化Bean队贱,Setter 方法 設(shè)置屬性值色冀,init-method與 destroy-method 方法 來(lái)初始化與銷(xiāo)毀 Bean。

(2)Bean 級(jí)生命周期接口方法:BeanFactoryAware,BeanNameAware,InitializingBean,DisposableBean柱嫌,這些由Bean直接實(shí)現(xiàn)锋恬。

(3)容器級(jí)生命周期接口方法:InstantiationAwareBeanPostProcessor,BeanPostProcessor编丘,可以將這兩個(gè)的實(shí)現(xiàn)類(lèi)稱為“后處理器”与学。這些接口一般不由Bean直接實(shí)現(xiàn),它們跟Bean是相互獨(dú)立的嘉抓,是以插件的形式作用于Bean索守,默認(rèn)情況下,是對(duì)全局的 Bean 產(chǎn)生影響抑片。

(4)容器級(jí)工廠后處理器接口方法:包括AspectJWeavingEnable卵佛,CustomAutowireConfigurer,ConfigurationClassPostProcessor 等方法。在應(yīng)用上下文裝配配置文件后立即調(diào)用敞斋。

Spring 可以注冊(cè)多個(gè)后處理器截汪,只要同時(shí)實(shí)現(xiàn) org.springframework.core.Ordered 接口,容器將會(huì)按照特定的順序依次調(diào)用這些后處理器植捎。

下一章衙解,我們將來(lái)講 Bean 生命周期實(shí)例,根據(jù)具體代碼來(lái)分析?BeanFactory 中 Bean 的生命周期焰枢,謝謝關(guān)注蚓峦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市济锄,隨后出現(xiàn)的幾起案子枫匾,更是在濱河造成了極大的恐慌,老刑警劉巖拟淮,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谴忧,居然都是意外死亡很泊,警方通過(guò)查閱死者的電腦和手機(jī)角虫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)委造,“玉大人戳鹅,你說(shuō)我怎么就攤上這事』枵祝” “怎么了枫虏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)爬虱。 經(jīng)常有香客問(wèn)我隶债,道長(zhǎng),這世上最難降的妖魔是什么跑筝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任死讹,我火速辦了婚禮,結(jié)果婚禮上曲梗,老公的妹妹穿的比我還像新娘赞警。我一直安慰自己,他們只是感情好虏两,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布愧旦。 她就那樣靜靜地躺著,像睡著了一般定罢。 火紅的嫁衣襯著肌膚如雪笤虫。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天引颈,我揣著相機(jī)與錄音耕皮,去河邊找鬼。 笑死蝙场,一個(gè)胖子當(dāng)著我的面吹牛凌停,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播售滤,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼罚拟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了完箩?” 一聲冷哼從身側(cè)響起赐俗,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弊知,沒(méi)想到半個(gè)月后阻逮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秩彤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年叔扼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了事哭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓜富,死狀恐怖鳍咱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情与柑,我是刑警寧澤谤辜,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站价捧,受9級(jí)特大地震影響丑念,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜干旧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一渠欺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椎眯,春花似錦挠将、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至掌测,卻和暖如春内贮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汞斧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工夜郁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粘勒。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓竞端,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親庙睡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子事富,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,804評(píng)論 6 342
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)乘陪,斷路器统台,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 文章作者:Tyan博客:noahsnail.com | CSDN | 簡(jiǎn)書(shū) 3.8 Container Exten...
    SnailTyan閱讀 1,233評(píng)論 0 6
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,152評(píng)論 2 7
  • 場(chǎng)景一:珍珠是一個(gè)大二在校生,周末在一家超市做兼職啡邑。她很珍惜這份工作贱勃,堅(jiān)持下去的話可以不用每月問(wèn)父母要生活費(fèi)了。但...
    信信子閱讀 239評(píng)論 0 1