2012-07-25 71 views
2

我有一組創建Spring Bean中使用構造器注入的。由於有(設計)其他bean的循環引用,所以我想在bean創建完成後對其進行後處理,以便將引用注入其他bean。春天的setter依賴注入已創建

在使用BeanPostProcessor的初步嘗試表明,每個bean實例化後,沒有等到一切都被實例化了BeanPostProcessor運行。

春天在什麼提供處理後作爲集豆的機制都已經被創建之後?

回答

2

如果要在ApplicationContext中創建bean,那麼ApplicationContext會將ApplicationEvents引發到任何已註冊的ApplicationListener回調。其中一個應該告訴你,上下文中的所有bean通過Spring連接在一起。

+0

感謝科比,這讓我走上了正軌。 – Dave 2012-07-25 18:44:50

0

這裏是the documentation說,關於循環依賴:

如果使用構造器注入,有可能 創建循環依賴的情況。例如:A類需要通過構造函數注入的B類到 構造函數注入的實例,而B類需要通過構造函數注入的A類 實例。如果爲類配置豆甲 和B被注入到彼此,Spring IoC容器檢測 在運行時循環引用,並拋出一個 BeanCurrentlyInCreationException。

一種可能的解決方法是編輯一些類的源代碼,以被配置爲通過設置器,而不是構造 。或者,避免使用構造函數注入並僅使用setter注入。換句話說, 雖然不建議這樣做,你可以配置圓形 依賴與setter注入。

不像在典型的情況(無循環依賴),豆甲和綠豆乙力之間的圓形 依賴性豆之一是 被完全初始化自身的其它前注入(一個 經典雞/蛋場景)。

我只是在這種情況下使用setter注入,或試圖避免循環依賴首先。另一種解決方案是製作其中一個Bean BeanFactoryAware,並在需要引用時從bean工廠查找其他bean。

+0

我在文檔中發現了同樣的內容,但我努力使它工作,請參閱http://stackoverflow.com/questions/15427664/wiring-mvp-with-spring-ioc-without-circular-reference/15428069 ?noredirect = 1#15428069。 – 2013-03-15 09:09:16