簡體   English   中英

Spring的運行時依賴注入

[英]Runtime dependency injection with Spring

我目前的項目是利用Spring,我們的架構師決定讓Spring管理服務,存儲庫和Factory對象,但不管理域對象。 我們正在密切關注域驅動設計。 不對域對象使用spring的原因主要是spring只允許靜態依賴注入。 靜態依賴注入的意思是在xml配置中指定依賴關系並且它們被“凍結”。

我可能錯了,但我目前的理解是,即使我的域只利用接口與對象進行通信,但spring的xml配置迫使我指定具體的依賴。 因此,必須在部署時解決所有具體的依賴關系。 有時,這是不可行的。 我們的大多數用例都基於根據運行時數據或從最終用戶接收的消息注入特定類型。

我們的大多數設計遵循命令模式。 因此,當我們收到命令時,我們想構建我們的域模型,並根據從命令接收的數據,我們將特定的類型集注入到我們的聚合根對象中。 因此,由於缺乏spring基於運行時數據構建域模型的能力,我們不得不使用靜態工廠方法,構建器和工廠模式。

有人可以建議春天是否有上述情況的問題?

我可以使用AOP注入依賴項,但后來我沒有利用spring的基礎架構。

我建議你閱讀Spring文檔中有關使用AspectJ依賴注入域對象的Spring的部分

有趣的是,你說:“我可以使用AOP注入依賴,但后來我沒有充分利用Spring的基礎設施,”考慮到AOP是Spring的基礎設施核心部分。 這兩個人在一起很順利。

上面的鏈接允許您讓Spring的AOP透明地將依賴項注入到創建的域對象中,而無需直接引用Spring基礎結構(例如使用new運算符)。 它非常聰明,但確實需要一些深層次的類加載修補。

Spring的依賴注入/配置僅用於配置低級技術基礎架構,例如數據源,事務管理,遠程處理,servlet掛載點等。

您使用spring在技術API和服務之間進行路由,在這些服務中,您只需編寫普通的Java代碼。 保持Spring遠離您的域模型和服務實現是一件好事。 首先,您不希望將應用程序的業務邏輯綁定到一個框架,或者讓低級技術問題“泄漏”到您的應用程序域模型中。 Java中的Java代碼比Spring的XML配置更容易修改,因此在Java中保留業務邏輯可以讓您更快地交付新功能並更輕松地維護應用程序。 Java比spring的XML格式更具表現力,因此如果您堅持使用純Java,您可以更清楚地模擬域概念。

Spring的依賴注入(以及一般的依賴注入)基本上用於將服務,存儲庫和工廠等連接在一起。它不應該直接處理需要動態響應命令等的事情,其中​​包括域的大部分內容對象。 相反,它允許您連接要用於執行這些操作的對象,從而控制這些操作的完成方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM