簡體   English   中英

無法自動接線。 Jaxb2Marshaller 類型的 bean 不止一種

[英]Could not autowire. There are more than one bean of type Jaxb2Marshaller

我使用 Spring 項目,其中我有一個主要配置 class 和其他 2 個配置類從那里擴展。 下面提供了示例代碼。

首先,由於您是使用@Bean方法創建OrderingClientSales2Client ,因此不要使用@Component注釋它們。 做一個或另一個,而不是兩個。

其次,你是按類型自動裝配的,而且有兩個,所以你需要添加額外的信息來區分它們。 您可以在參數上使用@Qualifier ,見下文。

但是,當兩個 bean 位於相同的@Configuration class 時,推薦的方法是簡單地調用該方法,如Spring 文檔中所示:

@Bean
public Jaxb2Marshaller brinkOrderingMarshaller() {
    ...
}

@Bean
public OrderingClient brinkOrderingClient() {
    Jaxb2Marshaller marshaller = brinkOrderingMarshaller();
    ...
}

使用@Qualifier

如果您更喜歡按類型自動連接參數,請使用@Qualifier ,如前所述。 有多種方法可以做到:

  • @Qualifier添加到@Bean方法,因此通過匹配限定符來解決歧義:

     @Bean @Qualifier("foo") public Jaxb2Marshaller brinkOrderingMarshaller() {... } @Bean public OrderingClient brinkOrderingClient(@Qualifier("foo") Jaxb2Marshaller marshaller) {... }
  • @Qualifier也支持按 bean name 匹配,默認bean name 為方法名:

     @Bean public Jaxb2Marshaller brinkOrderingMarshaller() {... } @Bean public OrderingClient brinkOrderingClient(@Qualifier("brinkOrderingMarshaller") Jaxb2Marshaller marshaller) {... }
  • 您還可以顯式命名 bean:

     @Bean("foo") public Jaxb2Marshaller brinkOrderingMarshaller() {... } @Bean public OrderingClient brinkOrderingClient(@Qualifier("foo") Jaxb2Marshaller marshaller) {... }
  • 如果您希望單個 bean 以不同的名稱解析多個用途,則可以為 bean 分配別名:

     @Bean({"foo", "alias1", "alias2"}) public Jaxb2Marshaller brinkOrderingMarshaller() {... } @Bean public OrderingClient brinkOrderingClient(@Qualifier("alias2") Jaxb2Marshaller marshaller) {... }

歧義也可以使用@Primary來解決,但這不適用於您的情況。

暫無
暫無

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

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