[英]It there a “Spring way” to get an implementation from an annotated interface?
[英]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.