Spring是如何解決迴圈依賴的
- createBeanInstance:例項化,其實也就是呼叫物件的構造方法例項化物件
- populateBean:填充屬性,這一步主要是多bean的依賴屬性進行填充
- initializeBean:呼叫spring xml中的init 方法。
/** Cache of singleton objects: bean name –> bean instance */private final Map singletonObjects = new ConcurrentHashMap(256);/** Cache of singleton factories: bean name –> ObjectFactory */private final Map> singletonFactories = new HashMap>(16);/** Cache of early singleton objects: bean name –> bean instance */private final Map earlySingletonObjects = new HashMap(16);複製程式碼
protected Object getSingleton(String beanName, boolean allowEarlyReference) {Object singletonObject = this.singletonObjects.get(beanName);//isSingletonCurrentlyInCreation()判斷當前單例bean是否正在建立中if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {synchronized (this.singletonObjects) {singletonObject = this.earlySingletonObjects.get(beanName);//allowEarlyReference 是否允許從singletonFactories中透過getObject拿到物件if (singletonObject == null && allowEarlyReference) {ObjectFactory<?> singletonFactory = this.singletonFactories.get(beanName);if (singletonFactory != null) {singletonObject = singletonFactory.getObject();//從singletonFactories中移除,並放入earlySingletonObjects中。//其實也就是從三級快取移動到了二級快取this.earlySingletonObjects.put(beanName, singletonObject);this.singletonFactories.remove(beanName);}}}}return (singletonObject != NULL_OBJECT ? singletonObject : null);}複製程式碼
public interface ObjectFactory<T> {T getObject() throws BeansException;}複製程式碼
protected void addSingletonFactory(String beanName, ObjectFactory<?> singletonFactory) {Assert.notNull(singletonFactory, "Singleton factory must not be null");synchronized (this.singletonObjects) {if (!this.singletonObjects.containsKey(beanName)) {this.singletonFactories.put(beanName, singletonFactory);this.earlySingletonObjects.remove(beanName);this.registeredSingletons.add(beanName);}}}複製程式碼
版權宣告:本文為「尚矽谷」的原創文章,轉載請附上原文出處連結及本宣告。下載相關影片學習資料到官方網站。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27721058/viewspace-2851121/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- spring是如何解決迴圈依賴的?Spring
- spring: 我是如何解決迴圈依賴的?Spring
- Spring如何解決迴圈依賴?Spring
- Spring中如何解決迴圈依賴Spring
- 深談Spring如何解決Bean的迴圈依賴SpringBean
- 徹底理解Spring如何解決迴圈依賴Spring
- spring解決迴圈依賴Spring
- 再探迴圈依賴 → Spring 是如何判定原型迴圈依賴和構造方法迴圈依賴的?Spring原型構造方法
- Spring迴圈依賴Spring
- Spring怎麼解決迴圈依賴?Spring
- Spring中的迴圈依賴Spring
- Spring IoC - 迴圈依賴Spring
- 【Spring】Spring中的迴圈依賴及解決Spring
- Spring 是怎麼處理迴圈依賴的?Spring
- 【Spring系列】- Spring迴圈依賴Spring
- Spring 迴圈依賴的三種方式(三級快取解決Set迴圈依賴問題)Spring快取
- Spring 中 bean 的迴圈依賴SpringBean
- 【Spring】快速理解迴圈依賴Spring
- Spring迴圈依賴+案例解析Spring
- 【spring】迴圈依賴 Java Vs SpringSpringJava
- Spring框架是怎麼解決Bean之間的迴圈依賴的 (轉)Spring框架Bean
- 24--Spring解決bean之間的迴圈依賴SpringBean
- 幫助你更好的理解Spring迴圈依賴Spring
- 面試題:Spring 的迴圈依賴問題面試題Spring
- Spring原始碼分析:Spring的迴圈依賴分析Spring原始碼
- Spring學習:簡單實現一個依賴注入和迴圈依賴的解決Spring依賴注入
- spring迴圈依賴解決過程&Bean的生命週期SpringBean
- 解決rpm包迴圈依賴
- 3.1 spring5原始碼系列--迴圈依賴 之 手寫程式碼模擬spring迴圈依賴Spring原始碼
- Spring如何使用三級快取解決迴圈依賴Spring快取
- Spring原始碼分析之迴圈依賴及解決方案Spring原始碼
- go 中的迴圈依賴Go
- 【spring原始碼系列】之【Bean的迴圈依賴】Spring原始碼Bean
- 關於我對Spring迴圈依賴的思考Spring
- 探索 JavaScript 中的依賴管理及迴圈依賴JavaScript
- SpringIOC迴圈依賴Spring
- 淺談迴圈依賴
- Spring原始碼分析之IOC迴圈依賴Spring原始碼