Spring Bean 循環依賴解決方案

因爲service層互相調用,一會兒沒有什麼好的拆分方案,因此先解決循環依賴問題。markdown

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

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

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

而後從上下文中獲取AService類型的bean便可設計

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

良好的設計架構通常不會出現循環依賴的問題,但一會兒沒有好的解決方案的時候,使用一些小技巧也何嘗不可,這是個人一個思路,有其餘好的解決方案歡迎指教。code