同じ名前の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]
Beanに異なる名前を付ける必要があります(複数のBeanが同じ名前で定義されている場合、後で定義されたものが前に定義されたものをオーバーライドします)。したがって、この場合、dataTransferHandler
という名前のBeanは1つだけ存在します。
これらの2つのBeanに異なる名前を付けることができるので、両方が存在し、次のいずれかを使用して正しいBeanに注入できます。@AutoWired @Qualifier("dataTransferHandler")
OR @Resource(name="dataTransferHandler")
自動配線時に優先するBean定義に属性primary = "true"を指定できます。ただし、Bean名は異なっている必要があります。同じBean名の解決策はありません。
自動配線されたクラスを取得する実行時に、プライマリTrueBeanが自動配線の優先順位を取得します。これがお役に立てば幸いです。乾杯。
同じ問題について別の質問をしましたが、@ Qualifierアノテーションを使用する必要のない解決策があります。両方のDataTransferHandlerクラスに@Componentアノテーションがある場合は、構造の1つにString引数を追加するだけです(つまり、@ Component( "Foo"))であり、追加の変更を必要とせずに問題を解決するはずです。
詳細については、 私の質問に対するUser9123の回答 を参照してください。