[英]Spring: Xml based Autowiring a list of beans by interface type
使用Spring,可以通過接口類注入bean列表,如:
@Component
public class Service {
@Autowire
private List<InterfaceType> implementingBeans;
...
}
實現此接口的所有已定義bean都將出現在此List中。
基於注釋的方法對我來說是不可能的,因為Service類在一個不能具有spring依賴性的模塊中。
我需要從外部通過xml配置使用此機制。
<bean id="service" class="...Service">
<property name="implementingBeans">
??? tell spring to create a list bean that resolves all beans of the interfaceType.
</property>
</bean>
有誰知道如何解決這個問題?
編輯:此外,有多個彈簧應用程序使用此服務。 所以最好的解決方案是通過xml配置完全處理這個szenario。 然后我可以將xml部分復制到需要它的所有spriong應用程序。
我想避免使用一種初始化bean來獲取注入的服務,然后必須將其復制到所有spring應用程序。
親切的問候。
在確實有Spring的依賴模塊,創建一個DTO
@Component(value = "beanDTO")
public class BeanDTO {
@Autowire
private List<InterfaceType> implementingBeans;
public List<InterfaceType> getImplementingBeans() {
return implementingBeans;
}
}
然后利用規划環境地政司要檢索的值implementingBeans
從beanDTO
豆。
<bean id="service" depends-on="beanDTO" class="...Service">
<property name="implementingBeans" value="{beanDTO.implementingBeans}" />
</bean>
Spring將創建BeanTDO
bean,注入所有類型為InterfaceType
的bean。 然后它將創建service
bean並從beanDTO
的implementingBeans
屬性設置其屬性。
編輯(來自對問題的評論)
為了更加符合JSR 330,Spring引入了對Java EE的javax.inject
包的支持。 您現在可以使用@javax.inject.Inject
而不是@Autowired
來注釋您的注射目標。 同樣,您可以使用@Named
而不是@Component
。 文檔有更多細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.