1. 程式人生 > >Spring 中的迴圈依賴

Spring 中的迴圈依賴

A 例項依賴 B 例項,B 例項依賴 C 例項,C 例項依賴 A 例項,依賴關係形成一個環,就稱為迴圈依賴。

protoType 作用域的迴圈依賴:迴圈依賴是對於單例來說的,spring 容器對於 protoType 作用域的 bean 不進行快取,因此無法完成依賴注入。

構造器迴圈依賴(單例):始終都在等待依賴建立成功,陷於死迴圈,無法解決。

setter 迴圈依賴(單例):在 bean 例項建立成功還未進行注入時,建立一個可以得到這個 bean 的 ObjectFatory,並將這個 ObjectFatory 加入快取。解決迴圈依賴如下圖:

<bean id="a" class="ClassA"/>
    <bean id="b" class="ClassB">
<property name="aref" ref="a" />
</bean>

<bean id="sysinit" class="SystemInit">  
<bean id="manager" class="CacheManager" depends-on="sysinit"/>  

XML 中的 ref 關係指的就是上文提到的依賴關係,依賴的 bean 是當前 bean 的屬性。

但有時候依賴關係並不會這麼明顯,但又確實存在,這時可以使用 depend-on。depend-on 依賴不允許形成閉環。