16

同じ名前の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]
4

3 に答える 3

21

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

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

于 2012-06-13T12:58:10.767 に答える
2

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

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

于 2012-06-13T12:59:07.777 に答える
0

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

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

于 2020-03-04T07:19:19.310 に答える