[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-79zgclgo-1584344327318)(d:\劉大spring\我的部落格日記\image-20200228144626326.png)]
上面就是springbean的大致生命週期。
bean的建立過程
建立bean之前會呼叫bean工廠的後置處理器,可以獲取到beandefinition
bean的初始化過程
初始化之前會呼叫前置處理器,可以獲取到beanname和bean例項
初始化之後會呼叫後置處理器,也是可以獲取到beanname和bean例項,可以做一些屬性的更改等
bean的初始化也就是注入屬性,這裡會涉及到迴圈依賴的問題。spring預設是開啟迴圈依賴的。
例如a依賴b,b依賴a
當建立a物件的時候,會呼叫getbeansington()方法,也就是去單例池中查詢有沒有a的bean,a還沒建立成功,肯定沒有。
呼叫下乙個getbeansington()方法,判斷a物件是否正在被建立,也就是去查詢set集合中有沒有a物件,這時候也沒有,然後將a加入set集合中
判斷是否支援迴圈依賴,是否是單例,是的話將a放入singltonfactors也就是第二個map,其實這兒存的是乙個工廠,後面就是通過這個工廠獲取物件的
開始注入屬性b
也是先去單例池中查詢有沒有b的bean,也沒有
判斷b物件是否正在被建立,這時候也沒有被建立,將b加入set集合中
判斷是否支援迴圈依賴,是否是單例,是的話放入第二個map中,此時map中已經有a和b
b也開始注入屬性a
去單例池獲取a的bean,沒有獲取到
去set集合中獲取a物件,獲取到了,說明a正在被建立
去第二個map中獲取到a的工廠,然後獲取到物件,如果a物件做了**,就會在這兒進行**
b物件注入屬性a完成,如果b物件也做了**的話,會再初始化完成之後進行aop
a物件此時就能從單例池中獲取到b物件
化完成之後進行aop
a物件此時就能從單例池中獲取到b物件
a物件萬層初始化。
Spring Bean生命週期
1.容器尋找bean的定義資訊並且將其實例化。2.受用依賴注入,spring按照bean定義資訊配置bean的所有屬性。3.如果bean實現了beannameaware介面,工廠呼叫bean的setbeanname 方法傳遞bean的id。4.如果bean實現了beanfactoryaware介面,...
spring bean生命週期
生命週期 定義,初始化,使用,銷毀 一.初始化 方法1.實現org.springframework.beans.foctory.initializingbean介面,覆蓋afterpropertiesset方法。系統會自動查詢afterpropertiesset方法,執行其中的初始化操作 方法2.配...
Springbean生命週期
springbean的完整生命週期大致如下 1 首先例項化 beanfactorypostprocessor的實現類,執行它的postprocessorbeanfactory方法 2 例項化beanpostprocessor 的實現類 3 例項化 instantiationawarebeanpost...