簡體   English   中英

Spring:基於Xml按接口類型自動裝配bean列表

[英]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;
    }
}

然后利用規划環境地政司要檢索的值implementingBeansbeanDTO豆。

<bean id="service" depends-on="beanDTO" class="...Service">
    <property name="implementingBeans" value="{beanDTO.implementingBeans}" />
</bean>

Spring將創建BeanTDO bean,注入所有類型為InterfaceType的bean。 然后它將創建service bean並從beanDTOimplementingBeans屬性設置其屬性。


編輯(來自對問題的評論)

為了更加符合JSR 330,Spring引入了對Java EE的javax.inject包的支持。 您現在可以使用@javax.inject.Inject而不是@Autowired來注釋您的注射目標。 同樣,您可以使用@Named而不是@Component 文檔有更多細節。

暫無
暫無

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

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