spring 怎么解決循環依賴的
spring 怎么解決循環依賴的
理解spring的生命周期
分為容器啟動階段、bean的實例化階段、bean的屬性注入階段、bean的初始化階段、bean的緩存階段、bean的銷毀階段
怎么解決循環依賴
假設有兩個對象 X和Y,X依賴了Y,Y依賴了X,spring能解決循環依賴,底層主要接住了3個map。
第一個是singletonObjects:緩存實例化好的bean
第二個是earlySingletonObjects:緩存半成品對象,多級循環依賴的社會化,不重復創建對象,提高效率
第三個是singletonFactories:緩存ObjectFactory對象
當在創建X對象的時候,會將lambda對象ObjectFactory放到singletonFactories中
后續進行屬性注入的時候,發現需要注入Y,就需要去創建Y,當創建Y的時候,也會將對應的lambda對象ObjectFactory放到singletonFactories中
Y的生命周期繼續往下走,然后填充屬性的時候,發現需要填充X,就會從三級緩存去獲取到ObjectFactory lambda表達式
執行表達式獲取到半成品對象,在這個階段,可以做很多擴展,比如AOP,提前完成代理
存到二級緩存earlySingletonObjects中
將X從三級緩存singletonFactories中移除
然后Y屬性注入完成后,Y就創建完成了,
繼續進行X屬性填充,填充完后,X也創建完成

浙公網安備 33010602011771號