訪問不受彈簧管理的應用中深層的彈簧組件的最佳方法(或選項)是什麼?深層注射 - 彈簧
例如,假設我有一些@Controllers。通過一些不受Spring管理的POJO抽象層,這些@Controllers最終可能會使用需要注入@Service的POJO。
一個選擇是將所有的圖層製作成彈簧組件,但是好像我在破解我的設計以強制春天來幫助我。我有一些複雜的事情發生,如果我必須@Autowire的一切都不會那麼幹淨。另一種選擇可能是在低級別類中手動注入組件,但我不確定這是否可行或正確的解決方案。
訪問不受彈簧管理的應用中深層的彈簧組件的最佳方法(或選項)是什麼?深層注射 - 彈簧
例如,假設我有一些@Controllers。通過一些不受Spring管理的POJO抽象層,這些@Controllers最終可能會使用需要注入@Service的POJO。
一個選擇是將所有的圖層製作成彈簧組件,但是好像我在破解我的設計以強制春天來幫助我。我有一些複雜的事情發生,如果我必須@Autowire的一切都不會那麼幹淨。另一種選擇可能是在低級別類中手動注入組件,但我不確定這是否可行或正確的解決方案。
本着回答原始問題的精神,我會說你可以讓低級的非Spring類實現ApplicationContextAware來訪問ApplicationContext,並使用ApplicationContext來訪問你想要的任何spring bean。 (google搜索「spring application context aware」找到sample code)
但是,本着這樣一個大問題,從一開始就存在一些問題。首先,這聽起來像你有高級組件,你想注入到低級別的組件 - 通常你希望你的設計是相反的方式。另外,正如已經指出的那樣,彼此「層疊」的事物可能不應該依賴於彼此。在這種情況下,考慮到這些要點來改進設計將有助於您。
我不會迴避將所有圖層轉換爲彈簧組件,以充分利用您已經使用的框架。如果您想使用DI框架,使用它來構建整個應用程序通常很有幫助。我認爲,整個使用@Inject(Java EE標準)和使用DI框架佈線進行範圍控制的乾淨設計實際上比「新」一切都要乾淨。
也許我想在任何地方都使用DI框架。我看到你關於如何創建混合/匹配的觀點,但所有的應用程序永遠都不需要是彈簧組件,所以以這種方式強制它看起來是錯誤的。框架應該幫助我,而不是強迫我去迎合它。 我試圖澄清原始文章 - 低級別的類不依賴於使用它的彈簧組件;它取決於高層控制器不知道的其他彈簧組件。 –
我決定從你共享的示例代碼中去找方法。如果我試圖強迫它實現完全彈簧管理的設計,那麼會有太多其他事情發生,最終會變得非常不自然。謝謝! –
我的直覺是,如果事情彼此「分離」,那麼他們就不應該依賴彼此。 – rolve
@rolve - 我不確定我是否理解評論,但我認爲我的回覆是「他們沒有」。 LowLevelHelper POJO需要使用\ @Service類來訪問數據庫。它不依賴於它上面的任何層。 –
@rolve - 我想我意識到混亂 - LowLevelHelper POJO需要使用的彈簧組件與「圖層」頂部的組件不同。我會在帖子中明確這一點。 –