2014-01-10 48 views
0

我有一個「核心」模塊,它有一個接口「DbService」。 該接口的實現是另一個模塊「MsSqlDbService」內(對於不同的目的,我有很多實行「DbService」的,所以我只是把在「正確的」地方「右」罐子運行我的程序之前)從另一個罐子添加接口實現

要加載「DbService」我用標準的java服務裝載機java.util.ServiceLoader<DbService>

所以我想:有沒有辦法讓我的Spring容器管理「DbService」? 因爲現在spring容器爲我管理實際加載「DbService」實現的類,而不是管理「DbService」本身。

+0

是由spring管理的MsSqlDbService嗎? – dhamibirendra

回答

1

(用於不同的目的我有很多實行 「DbService」,所以 我的地方「right」jar在運行我的 程序之前的「正確」位置)

如果我瞭解co正確地說,你有多個JAR,都包含相同接口的實現。你希望Spring能夠在部署時選擇類路徑中的哪一個,然後自動裝載正確的一切?

春天絕對可以作爲「窮人的插件框架」來完成這樣的事情:

1)在你的主要項目中,添加到您的背景:

<import resource="classpath:applicationContext-dbService.xml"/>

2)在每個JAR中,創建一個名爲applicationContext-dbService.xml的文件。對於您提供的SQL Server示例,它看起來像這樣。

<bean id="msSqlDbService" class="com.foo.MsSqlDbServiceImpl"/> 

3)當你的主要方面被加載,Spring將掃描命名爲applicationContext-dbService.xml文件的類路徑,然後處理在他們中定義的任何豆。假設你在部署時只在類路徑上有一個「插件」JAR,你可以將DbService的實例自動裝入主項目中的任何東西。

+0

它的工作原理。謝謝。 關於「窮人的插件框架」 - 你認爲它應該以另一種方式完成嗎?我的意思是 - 這樣做是不正常的嗎?因爲自從我剛接觸java世界以來,我不知道如何去做,所以我自己想出了這個方法。 – nikopol86

+0

我有幾個使用Spring做同樣的事情的項目。完全正常的做事方式。如果它適合你,請繼續使用它,不用擔心。我的意思是「窮人的插件框架」是這種方法不像OSGi那樣全功能。例如,它不處理插件版本控制,插件之間的依賴關係或生命週期事件(啓動/停止/卸載插件)。但是,1)你沒有表明你有任何這些功能的需求2)將更多的努力添加像OSGi到你的項目。 –

0

您可以將接口定義爲該類的成員。

class Demo{ 

@Autowired 
@Qualifier("msSqlDbService") 
private DbService dbService; 

//Setter and getter 
} 

現在就把DbService實現類(你需要)在Spring的XML配置

<bean id="msSqlDbService" class="xxxx.MsSqlDbService"/>//xxxx is the package name. 
+0

MsSqlDbService是來自單獨jar(模塊)的類,它不是「核心」內的包。所以這是不可能的。不過謝謝。 – nikopol86

+0

我沒有明白你的意思。如果您需要使用jar中的任何類,則需要將其放入應用程序的類路徑中。而這是不可能的? –

相關問題