正確なエラー メッセージを再現し、修正しました。これは、私が使用したソースコードからパッケージ名を除いたものです。コピーして実行し、自分のものと比較することをお勧めします。私が気付いた違いの 1 つは、質問に書かれているように、AImpl がコンパイルされないことです。GenericDAOImpl と GenericDAO の両方を実装しています。最初のジェネリック パラメータを Turno に変更して、コンパイルできるようにしました。これはタイプミスだったと思います。最初にすべてのフィールドを @Autowired に設定したときのエラーを正確に再現しました。次に @Qualifier("genericDAO") を追加すると、3 つすべてが正常に接続されました。
public interface GenericDAO<T, ID extends Serializable> {}
...
@Repository("genericDAO")
public class GenericDAOImpl<T, ID extends Serializable> implements GenericDAO<T, ID> {}
...
public interface A extends GenericDAO<Turno, Long> {}
...
public interface B extends GenericDAO<TipoTurno, Long> {}
...
@Repository("A")
public class AImpl extends GenericDAOImpl<Turno, Long> implements A {}
...
@Repository("B")
public class BImpl extends GenericDAOImpl<TipoTurno, Long> implements B {}
...
public class TipoTurno {}
...
public class Turno {}
...
@Component
public class Thingy {
@Autowired
private A a;
@Autowired
private B b;
@Autowired
@Qualifier(value="genericDAO")
private GenericDAO genericDao;
}
...
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("genericdao.xml");
context.getBean(Thingy.class);
}
}
...
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="genericdao"/>
</beans>
実際のエラー メッセージは、指定したものよりも長いことに注意してください。原因を探して全体を読むことが重要です。Spring は、原因のレベルが 5 つ、場合によっては 10 レベルある例外スタック トレースを好みます。ここに私が得るメッセージの関連する部分文字列があります:
フィールドを自動配線できませんでした: genericdao.GenericDAO genericdao.Thingy.genericDao; ネストされた例外は org.springframework.beans.factory.NoSuchBeanDefinitionException: タイプ [genericdao.GenericDAO] の一意の Bean が定義されていません: 単一の一致する Bean が予想されますが、3 が見つかりました: [A, B, genericDAO]
これは、オートワイヤーされていないフィールドがThingy.genericDao
ではなく であったことを示していThingy.a
ます。これはあなたのエラーにも当てはまると強く思います。