天天看點

spring如何解決循環依賴

什麼是循環依賴

看這兩個demo

public class A{
    private B b;
}

public class B{
    private A a;
}      

當你new了一個A

spring在執行個體化A的時候發現依賴B

這時候spring就會先去執行個體化B

然後又發現B依賴了A

spring又去執行個體化A

。。。。。。

由此導緻無限循環

如何解決

首先搞懂一個概念,解決循環依賴并不是靠我們,spring會幫我們解決

但是!!!記住一點,很重要

spring隻能通過提前暴露bean來解決setter注入的循環依賴,構造器注入的循環依賴無法解決(Spring執行個體化一個bean的時候,是分兩步進行的,首先執行個體化目标bean,然後為其注入屬性。)

不過話說回來,如果出現循環依賴,一般都是設計上的問題,但凡正經點的項目都不會出現這種問題,如果出現了,不用方,我們能做的就是把構造器建立bean改成setter,剩下的交給spring;