簡體   English   中英

從另一個jar添加Spring接口實現

[英]Add to spring an interface implementation from another jar

我有一個“ 核心 ”模塊,其接口為“ DbService ”。 該接口的實現在另一個模塊“ MsSqlDbService ”內(出於不同的目的,我有很多“ DbService ”實現,因此在運行程序之前,我只是將“正確的” jar放在“正確的”位置)

要加載“ DbService ”,我使用標准的Java服務加載器java.util.ServiceLoader<DbService>

所以我想知道:有沒有辦法讓我的spring容器管理“ DbService ”? 因為現在spring容器為我管理實際加載“ DbService ”實現的類,而不是管理“ DbService ”本身。

(出於不同的目的,我有很多“ DbService”的實現,因此在運行程序之前,我只是將“正確的” jar放在“正確的”位置)

如果我理解正確,則您有多個JAR都包含同一接口的實現。 您想讓Spring在部署時拾取類路徑中的任何一個,然后將所有東西正確地自動裝配在一起?

絕對可以將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文件,然后處理其中定義的所有bean。 假設在部署時,類路徑上只有一個“插件” JAR,則可以將DbService實例自動連接到主項目中的任何內容。

您可以將DbService接口定義為DbService的成員。

class Demo{

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

//Setter and getter
}

現在將DbService的實現類(您需要的)放在spring xml config中

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

暫無
暫無

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

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