Spring如何解決循環依賴的?

在這裏插入圖片描述
假設有兩個實例A,B循環依賴。
且作用域都是單例,因爲Spring只支持單例的循環依賴。
假設掃描到了A,調用getBean方法,由於是單例,調用getSingleton方法,發現三個緩中都沒有A,進入CreateBeanInstance的流程。此時創建的是能夠創建A的工廠放進了三級緩存裏面,然後執行populateBean的流程,也就是填充A的屬性。
填充A的屬性遇到了B,調用getBean()一樣的流程,到了填充B屬性的時候,發現依賴A,調用getBean(A),此時三級緩存的第三級別緩存具有A 的工廠,利用三級緩存獲得的工廠生成A,放入到二級緩存同時刪除三級緩存的功能工廠,返回給B。此時B創建完成,放到一級緩存同時返回給A。至此,循環依賴解析完成。

注意:Spring僅僅支持單例模式的setter注入。
因爲在構造包裝類是在注入三級緩存之前,脫離了三級緩存的支持,均不支持循環依賴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章