web-dev-qa-db-ja.com

同じ名前でパッケージが異なる2つのBean。それらを自動配線する方法は?

同じ名前のBeanが2つあるが、パッケージが異なるアプリケーションがあります。どのBeanを使用するかを決定できないため、Springアプリケーションが失敗します。これに対する解決策はありますか? Beanは現在、特定のインターフェースを実装していません。

例外の編集された例を以下に示します。

Caused by:
org.springframework.context.annotation.ConflictingBeanDefinitionException:
Annotation-specified bean name 'dataTransferHandler' for bean class
[aaaaa.ws.handler.DataTransferHandler] conflicts with existing,
non-compatible bean definition of same name and class
[bbbbb.ws.handler.DataTransferHandler]
12
Marco

Beanに異なる名前を付ける必要があります(複数のBeanが同じ名前で定義されている場合、後で定義されたものが前に定義されたものをオーバーライドします)。したがって、この場合、dataTransferHandlerという名前のBeanは1つだけ存在します。

これらの2つのBeanに異なる名前を付けることができるので、両方が存在し、次のいずれかを使用して正しいBeanに注入できます。@AutoWired @Qualifier("dataTransferHandler") OR @Resource(name="dataTransferHandler")

19
Biju Kunjummen

自動配線時に優先するBean定義に属性primary = "true"を指定できます。ただし、Bean名は異なっている必要があります。同じBean名の解決策はありません。

自動配線されたクラスを取得する実行時に、プライマリTrueBeanが自動配線の優先順位を取得します。これがお役に立てば幸いです。乾杯。

2
Japan Trivedi

同じ問題について別の質問をしましたが、@ Qualifierアノテーションを使用する必要のない解決策があります。両方のDataTransferHandlerクラスに@Componentアノテーションがある場合は、構造の1つにString引数を追加するだけです(つまり、@ Component( "Foo"))であり、追加の変更を必要とせずに問題を解決するはずです。

詳細については、 私の質問に対するUser9123の回答 を参照してください。

0
Dean Gurvitz