Spring Bean の定義に問題があります。main() メソッドによってロードされているコンテキスト xml ファイルがいくつかありますが、どちらもほぼタグのみを含んでいます。メイン メソッドが起動すると、Spring から次のエラーが発生します。
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'converterDAO' for bean class [my.package.InMemoryConverterDaoImpl] conflicts with existing, non-compatible bean definition of same name and class [my.other.package.StaticConverterDAOImpl]
両方の DAO クラスには、次のように注釈が付けられます。
@Repository("converterDAO")
public class StaticConverterDAOImpl implements ConverterDAO {
...
}
インメモリ dao には @Repository("converterDAO") アノテーションもあります。dao は、次のように他のクラスで参照されます。
...
private @Autowired @Qualifier("converterDAO") ConverterDAO converterDAO;
...
私は、ある DAO が他の DAO の定義をオーバーライドすることを望んでいます。これは、そもそも DI フレームワークを使用する主な理由の 1 つであることを常に理解していました。私は何年もxml定義でこれを行ってきましたが、問題はありませんでした。しかし、コンポーネント スキャンと注釈付き Bean 定義ではそうではありませんか? また、Spring が「互換性がない」と言うとき、Spring は何を意味するのでしょうか? これらは同じインターフェイスを実装し、そのインターフェイス タイプのフィールドに自動配線されます。なぜ彼らは互換性がないのですか?
コンポーネントをスキャンして注釈を付けた Bean が別の Bean をオーバーライドする方法を教えてもらえますか?
-マイク