因爲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