Spring解決迴圈依賴 筆記

2021-10-07 11:22:52 字數 550 閱讀 1462

參考:

spring內部維護了三個map,也就是我們通常說的**快取,位置在defaultsingletonbeanregistry

private final mapsingletonobjects = new concurrenthashmap(256);

private final map> singletonfactories = new hashmap(16);

private final mapearlysingletonobjects = new hashmap(16);

建立a發現singletonobjects 沒有,然後建立a,並提前暴露,放到singletonfactories 中,然後依賴注入,發現需要b

發現singletonobjects 沒有,然後建立b,並提前暴露,放到singletonfactories 中,然後依賴注入,發現需要a,a已經提前暴露,注入a,放到earlysingletonobjects ,b建立完畢,然後a建立完畢

其實就是類似two sum的思想。

spring解決迴圈依賴

或者原型 prototype 的場景是不支援迴圈依賴的,丟擲異常。基於構造器的迴圈依賴,是不存在的。那麼預設單例的屬性注入場景,spring是如何支援迴圈依賴的?首先,spring內部維護了三個map,也就是我們通常說的 快取。在spring的defaultsingletonbeanregistry...

spring解決迴圈依賴

之前面試有被問到過,面試官很調皮,我擅長的點沒有問,然後抽了乙個點讓我回答,這個點考察了原始碼的理解,當時只是大概記得是提前暴露,但是細節答得有些粗糙,特補充一下,protected object getsingleton string beanname,boolean allowearlyrefe...

spring迴圈依賴的解決

當a類中有b屬性,b類中有a屬性的時候,就會產生迴圈依賴。a在例項化的時候,引用了b,但是b麼有例項化,所以就會先例項化b,這個時候發現b又引用了a,但是a還沒有例項化,所以就造成了迴圈依賴。我們來看看spring是如何解決的 public class classa public classa pu...