面試官:說下spring生命週期 程式設計師:不會 那你先回去等訊息吧
Bean實現了BeanNameAware,Spring會將Bean的ID透傳給setBeanName
java、後端開發、程式員、spring
經常被面試問到的題目之一
面試失敗經歷
面試官:請介紹一下Spring框架中Bean的作用域及生命週期?
程式汪汪:不知道
面試官:你工作好多年了,(嫌棄的眼神)那你可以回去等電話
Spring框架中Bean的5個作用域
singleton單例:是spring預設預設的,全域性只有一個物件。
prototype原型:每次都是新的Bean例項,有狀態的Bean建議用此型別。
request:一次Http請求中,容器返回同一例項Bean,僅在當前Http Request內有效
session:一次Http Session中,容器返回同一例項Bean,僅在當前Session內有效。
global session:一個全域性的Http Session中,容器返回同一個例項Bean。

很多程式員開發,很可能都沒注意Bean竟然有這麼多種作用域,其實實際專案一般就前面2種會涉及到,但面試官喜歡問。
Bean的生命週期
我多找幾個比較好的圖,大家對比著理解理解

好多介面好多方法啊,來我們分個類
Bean自身的方法:的init-method和destor-method方法
Bean級生命週期介面方法:包含了BeanNameAware、BeanFacotyAware、InitialiZingBean和DisposableBean 介面方法
Spring容器生命週期介面方法:有BeanPostProcessor"後處理器"

bean物件例項化,預設Bean作用域singleton
Spring對bean進行依賴注入
Bean實現了BeanNameAware,Spring會將Bean的ID透傳給setBeanName
Bean實現了BeanFacotryAware或ApplicationContentAware,Spring會呼叫設定工廠setBeanFatory方法並將BeanFacoty例項透傳進來,或SetApplicationContext方法被呼叫,Spring將應用上下文引用透傳到Bean裡。
Bean實現了BeanPostProcessor(後處理),bean的postProcessBeforeInitialization方法會被執行
Bean實現了InitializingBean,bean的afterPropertiesSet方法 就會被呼叫
初始化方法init
BeanPostProcessor(後處理),執行postProcessAfterInitialization
這時Bean準備就緒,可以執行業務邏輯被服務方呼叫了,Bean會一直存活在應用上下文中,直到應用上下文被銷燬。
Bean實現DisposableBean,spring將執行destory方法
指定銷燬方法 destroy
實戰開發中Bean很少都去實現上面的全部介面,一般最多init-method、destroy-method
BeanNameAware原始碼
BeanFactoryAware原始碼

ApplicationContextAware原始碼

BeanPostProcessor原始碼 【before/after】

InitializingBean原始碼

DisposableBean原始碼

Spring原始碼

最後送波福利。現在加群即可獲取Java工程化、高效能及分散式、高效能、高架構、zookeeper、效能調優、Spring、MyBatis、Netty原始碼分析和大資料等多個知識點高階進階乾貨的直播免費學習許可權及相關視訊資料,群號:835638062 點選連結加入群聊【Java高階架構學習交流】:https://jq.qq.com/?_wv=1027&k=5S3kL3v