[英]IntelliJ “Could not autowire.” inspection, “[…] more than one bean” for Spring JPA repositories
[英]Could not autowire. There are more than one bean of type Jaxb2Marshaller
我使用 Spring 項目,其中我有一個主要配置 class 和其他 2 個配置類從那里擴展。 下面提供了示例代碼。
首先,由於您是使用@Bean
方法創建OrderingClient
和Sales2Client
,因此不要使用@Component
注釋它們。 做一個或另一個,而不是兩個。
其次,你是按類型自動裝配的,而且有兩個,所以你需要添加額外的信息來區分它們。 您可以在參數上使用@Qualifier
,見下文。
但是,當兩個 bean 位於相同的@Configuration
class 時,推薦的方法是簡單地調用該方法,如Spring 文檔中所示:
@Bean
public Jaxb2Marshaller brinkOrderingMarshaller() {
...
}
@Bean
public OrderingClient brinkOrderingClient() {
Jaxb2Marshaller marshaller = brinkOrderingMarshaller();
...
}
如果您更喜歡按類型自動連接參數,請使用@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.