Spring 中的迴圈依賴
阿新 • • 發佈:2018-12-14
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 依賴不允許形成閉環。