Spring迴圈依賴解決原始碼解析

2021-10-08 07:27:02 字數 1072 閱讀 9637

相關方法

1) spring無法解決構造方法注入引起的迴圈依賴問題

2) spring無法解決多例物件的迴圈依賴問題,因為多例物件是不進行快取的

//第一級快取:快取已經完成了例項化和屬性設定的單例物件(單例物件快取)

private

final map

singletonobjects =

newconcurrenthashmap

<

>

(256);

//第二級快取:快取完成了只完成例項化,沒有設定依賴屬性的單例物件(早期暴露的單例物件快取)

private

final map

earlysingletonobjects =

newhashmap

<

>(16

);//第**快取:快取單例物件的物件工廠引用,工廠封裝了生成物件的邏輯(單例物件工廠快取)

private

final map?>> singletonfactories =

newhashmap

<

>(16

);

dogetbean方法執行
public object getsingleton

(string beanname)

protected object getsingleton

(string beanname,

boolean allowearlyreference)}}

}return singletonobject;

}protected

void

addsingletonfactory

(string beanname, objectfactory<

?> singletonfactory)}}

protected

void

addsingleton

(string beanname, object singletonobject)

}

Spring 解決迴圈依賴原始碼分析

迴圈依賴就是n個類之間迴圈巢狀引用,如a依賴b,b又依賴a,你中有我,我中有你。例項化a時發現需要b屬性,於是去例項化b,發現需要a屬性。如果spring不對這種迴圈依賴進行處理程式就會無限執行,導致記憶體溢位 系統崩潰。迴圈依賴又分為構造器迴圈依賴和屬性迴圈依賴,由於spring不支援構造器迴圈依...

Spring迴圈依賴原始碼Debug

首先我們要搞清楚兩個概念 例項化 初始化 例項化 堆記憶體中申請一塊記憶體空間,類似租賃好房子,自己的家具東西還沒有搬家進去 初始化屬性填充 完成屬性的各種賦值,類似裝修 家電家具進場 快取 四大方法 快取 第一層singletonobjects存放的是已經初始化好了的bean。第二層earlysi...

Spring迴圈依賴 原始碼上分析

一 spring bean 的建立 四個階段 二 defaultsingletonbeanregistry 三個主要不同階段bean的map 今天所要主要關注是 例項化 instantiation createbeaninstance 和 屬性賦值 populate populatebean 量階段...