參考:
spring內部維護了三個map,也就是我們通常說的**快取,位置在defaultsingletonbeanregistry
private final mapsingletonobjects = new concurrenthashmap(256);建立a發現singletonobjects 沒有,然後建立a,並提前暴露,放到singletonfactories 中,然後依賴注入,發現需要bprivate final map> singletonfactories = new hashmap(16);
private final mapearlysingletonobjects = new hashmap(16);
發現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...