SpringBean的生命週期以及迴圈依賴過程

2021-10-03 23:34:13 字數 1074 閱讀 2988

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(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...