2017-11-13 2 views
0

このスーパークラスDAOを見つけました:Springフレームワークは、単一のマッチングBeanを期待しかし、2

public class CrudDAO{ 

} 

この子クラス:

@Repository 
public class JnsTimeDao extends CrudDAO { 

} 

@Repository 
public class BatchDAO extends CrudDAO { 
} 

このスーパーサービスクラス

@Transactional(readOnly = true) 
public abstract class CrudService<D extends CrudDAO> { 

    @Autowired 
    protected D dao; 
} 

起動エラー:

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.gp.dao.CrudDAO] is defined: expected single matching bean but found 2: batchDAO,jnsTimeDao

+0

を注入しながら

@Repository("jnsTimeDao") public class JnsTimeDao extends CrudDAO { } @Repository("batchDao") public class BatchDAO extends CrudDAO { } 

を次のように解決することができます '' JnsTimeDao'と 'BatchDao'というものをCrudDAO'。したがって、Springランタイムは重複したBeanを不平にしています。 Springランタイムがこれらのいずれかを適格なBeanとして見つけて配線するようにする必要があります。 –

答えて

3

CrudDAOの2種類の豆があります。したがって、SpringはどのBeanを注入するのか理解できません。あなたはタイプの2つの豆を持って使用@Qualifier

@Transactional(readOnly = true) 
    public abstract class CrudService<D extends CrudDAO> { 

     @Autowired 
     @Qualifier("batchDao") 
     protected D dao; 
    } 
+0

@Transactional(readOnly = true)をデフォルトのものとして@Transactional()に変更してください –

+0

これは正しいですが、特長指向のカスタム 'Qualifier'を使用する方がBean IDに基づくものよりも優れています。 –

+0

CrudServiceはスーパークラス – HelloWorld

関連する問題