2010-02-10 51 views
2

以Web用戶爲單位對每個用戶進行交換實現說一個Web應用程序是一箇中央支付處理引擎,其中每個用戶可能有一個不同的信用卡提供商來處理信用卡。如何使用Spring的DI

有一個接口,所有的實現遵守。

我想知道是否有規律可循的,你可以讓新的實現在部署文件夾(.jar文件)簡單地下降,而無需重新編譯應用程序。您至多不得不進入管理部分並輸入關於新信用卡實施的一些詳細信息。

示例:假定應用程序當前支持Authorize.net。所以所有用戶都使用authorize.net。現在我編寫一個新的實現並刪除.jar文件,進入管理員並註冊新的信用卡提供商。

現在用戶可以登錄到系統,並選擇使用新的實現。

這可能做不必重新編譯? 春天的DI會派上用場嗎?

回答

3

你所描述的聽起來比起「基本的」Spring bean容器機制更適合OSGi。通常,應用程序啓動並運行後,Spring ApplicationContext不會更改。相比之下,OSGi專爲這種運行時動態行爲而設計,可以與Spring結合使用。看看Spring Dynamic Modules文檔,瞭解它的工作原理。

2

我建議你看看java.util.ServiceLoader,它允許你爲接口實現做一個'查找',它在運行時動態添加到類路徑中。基本上,服務jar必須包含一個叫做/META-INF/services/some.package.InterfaceName的文本文件,它包含一個類的列表,它實現了指定的接口。

然而,沒有標準化的方式來擴展正在運行的Web應用程序的類路徑(如在J2EE Web應用程序中那樣),所以根據您的servlet容器,您可能必須在將新JAR添加到部署目錄後重新啓動Web應用程序。

+0

+1對於'ServiceLoader' – skaffman 2010-02-10 16:45:34

0

@Rob H爲OSGi提供了一個很好的選擇,因爲它本身就支持你想要做的事情。

另一種不會引入新技術的選擇是將支付方法委託給其他Java EE應用程序,然後可以獨立於中央支付處理引擎啓動,添加或更新這些應用程序。管理員可以輕鬆將新的付款方式映射到適當的應用程序。