spring是如何解決循環依賴的【白話版】

場景一:成員變量引入即A依賴B,B依賴A
1. 在finishBeanFactoryInitialization中,開始初始化A,毋庸置疑通過反射
2. 之後【非完美對象】開始設置屬性字段,此時發現需要一個B的對象。同時已標記A處於正在初始化階段
3. 顯然接下來,開始去初始化B的對象,同樣的手法,到設置屬性階段,發現需要A對象
4. 於是乎,spring又開始去初始化對象A的依賴,此時先從緩存singletonObjects去取,沒有再去看是否正處於初始階段,是則再從緩存earlySingletonObjects中取,再沒有,則看是否存在allowEarlyReference,是則從singletonFactories中取
5. 將早期對象A設置到B中,再把B設置到A中

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