Spring如何解決迴圈依賴問題

2021-10-21 15:26:46 字數 507 閱讀 5572

迴圈依賴問題在spring中主要有三種情況:

(1)通過構造方法進行依賴注入時產生的迴圈依賴問題。

(2)通過setter方法進行依賴注入且是在多例(原型)模式下產生的迴圈依賴問題。

(3)通過setter方法進行依賴注入且是在單例模式下產生的迴圈依賴問題。

在spring中,只有第(3)種方式的迴圈依賴問題被解決了,其他兩種方式在遇到迴圈依賴問題時都會產生異常。這是因為:

第一種構造方法注入的情況下,在new物件的時候就會堵塞住了,其實也就是」先有雞還是先有蛋「的歷史難題。

第二種setter方法(多例)的情況下,每一次getbean()時,都會產生乙個新的bean,如此反覆下去就會有無窮無盡的bean產生了,最終就會導致oom問題的出現。

spring在單例模式下的setter方法依賴注入引起的迴圈依賴問題,主要是通過二級快取和**快取來解決的,其中**快取是主要功臣。解決的核心原理就是:在物件例項化之後,依賴注入之前,spring提前暴露的bean例項的引用在第**快取中進行儲存。 

Spring如何解決迴圈依賴

比如 在a類引入b物件,在b類引入a物件,建立a的時候需要依賴b,建立b的時候需要依賴a,而各自建立物件的時候,其互相依賴的物件還沒有建立完成,就導致各自都無法成功建立物件。這就是迴圈依賴。class aclass b解決迴圈依賴的方法很簡單,如下所示,先例項化a和b,此時都沒初始化,即都沒有對各自...

spring如何解決迴圈依賴

1.構造器注入 無法解決 構造器注入時,a,b都沒有進行初始化物件 構造方法無法執行完成 2.spring 為了解決單例的迴圈依賴問題,使用了 快取。其中一級快取為單例池 singletonobjects 二級快取為提前 物件 earlysingletonobjects 快取為提前 物件工廠 sin...

Spring如何解決迴圈依賴

多個bean之間相互依賴,形成了乙個閉環。比如 a依賴於b b依賴於c c依賴於a 通常來說,如果問spring容器內部如何解決迴圈依賴,一定是指預設的單例bean中,屬性互相引用的場景。也就是說,spring的迴圈依賴,是spring容器注入時候出現的問題。例項化a 將半成品的a放入singlet...