1. 程式人生 > >Spring Bean 迴圈依賴解決方案

Spring Bean 迴圈依賴解決方案

由於service層互相呼叫,一下子沒有什麼好的拆分方案,所以先解決迴圈依賴問題。

現有AService 和BService,都在對方bean中注入,導致初始化時迴圈初始報錯,解決方案就是選擇其一使其延遲載入。

用配置方式只要將其一設定lazy-init,具體沒嘗試過因為不適用配置申明的方式。

使用@Resouce或@Autowire方式自動注入的,將其一去掉自動注入註解(或者兩個都去掉),使其在建立物件時不進行自動注入,而是在使用前從IOC容器中獲取。獲取IOC容器的方法參見
獲取Spring的上下文環境ApplicationContext的方式

然後從上下文中獲取AService型別的bean即可

synchronized (AService .class) {
    if (aService== null) {
        synchronized (AService .class) {
            aService= applicationContext
                .getBean(AService .class);
        }
    }
}

良好的設計架構一般不會出現迴圈依賴的問題,但一下子沒有好的解決方案的時候,使用一些小技巧也未嘗不可,這是我的一個思路,有其他好的解決方案歡迎指教。