Spring中的循環依賴問題介紹及解決方法

Spring容器能順利的實例化以構造函數注入方式配置的bean有一個前提:即bean構造函數入參引用的對象必須已經準備就緒。
那麼如果兩個bean都採用構造函數注入,並且都通過構造函數入參引用了對方。就會發生類似與線程死鎖的循環依賴問題。
那麼接下來我們看一個發生循環依賴問題的例子:
public class Car{
    private String brand;
    private Boss boss;
    public Car(String brand, Boss boss) {
        this.brand = brand;
        this.boss = boss;
    }
}
public class Boss{
    private String name;
    private Car car;

    public Boss(String name, Car car) {
        this.name = name;
        this.car = car;
    }
}
可以看到在Car類中的構造函數中引入了Boss類對象,而在Boss類的構造函數當中引入了Car類。
看一下相應的配置文件:
<bean id="car" class="cn.lovepi.chapter02.reflect.Car">
    <constructor-arg index="0" value="紅旗CA72"/>
    <constructor-arg index="1" ref="boss"/>
</bean>
<bean id="boss" class="cn.lovepi.chapter03.scope.Boss">
    <constructor-arg index="0" value="wang"/>
    <constructor-arg index="1" ref="car"/>
</bean>
這種情況下,Spring容器無法成功啓動。
這種情況的解決方式便是:
調整配置文件,將構造函數注入方式改爲屬性注入方式即可。



發佈了68 篇原創文章 · 獲贊 132 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章