Spring Bean 迴圈依賴解決方案
阿新 • • 發佈:2019-01-02
由於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);
}
}
}
良好的設計架構一般不會出現迴圈依賴的問題,但一下子沒有好的解決方案的時候,使用一些小技巧也未嘗不可,這是我的一個思路,有其他好的解決方案歡迎指教。