2013-07-26 144 views
0

在Spring bean工廠中使用循環依賴關係有哪些缺陷? 例如製作豆製品工廠A取決於B和B取決於A?Spring beanfactory中的循環依賴關係

+0

爲什麼你想這樣做? – 2013-07-26 06:59:01

+0

@Tichodroma我我知道我們避免這樣做,但我有一個可能有用的例子,在決定之前我只想得到一些意見 – Mangoose

回答

1

如果您使用setter或fields創建循環依賴關係,那麼確實沒有太多問題。如果初始化依賴於這些依賴關係,那麼init必須在所有bean被構建和注入之後完成。

如果它們是構造函數注入的,那麼顯然不可能創建結果對象。但是,例如, Guice的確如此,你可以通過向其中一個bean注入一個「shell」代理:當構造需要B的A時,你創建一個空的B的pass-through-proxy,並注入它。然後你構造B,給它適當的A.然後你回到代理並將B放入代理。所以現在你在A中沒有真實的B,而是B的代理。這可能或可能不是問題。我傾向於不喜歡這個,發現結果不可預測。

此外,循環依賴關係(循環依賴關係)還包括循環依賴關係指向壞的建築。您應該能夠構造不帶圓圈的整個代碼圖:依賴關係圖應該是DAG - 有向無環圖。違反此規定時您應該得到一個錯誤! (但是,注入器顯然必須嘗試整理DAG,然後從葉節點開始向上,Guice完全不這樣做,即使打開「不使用代理」,也是隨機獲得的代理或不代理,即使你不應該需要它。如果你打開該選項,它只是隨機拋出,使選項絕對毫無價值..