spring框架:预期单个匹配bean但找到2

Hel*_*rld 2 spring spring-framework-beans

这个超级DAO:

public class CrudDAO{

}
Run Code Online (Sandbox Code Playgroud)

这个孩子班:

@Repository
public class JnsTimeDao extends CrudDAO {

}

@Repository
public class BatchDAO extends CrudDAO {
}
Run Code Online (Sandbox Code Playgroud)

这个超级服务类

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

    @Autowired
    protected D dao;
}
Run Code Online (Sandbox Code Playgroud)

启动错误:

org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有定义[com.gp.dao.CrudDAO]类型的限定bean:期望的单个匹配bean但找到2:batchDAO,jnsTimeDao

amd*_*mdg 6

有两种类型的豆类CrudDAO.所以,Spring将无法理解要注入哪个bean.可以解决如下

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

}

@Repository("batchDao")
public class BatchDAO extends CrudDAO {
}
Run Code Online (Sandbox Code Playgroud)

注射使用时 @Qualifier

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

        @Autowired
        @Qualifier("batchDao")
        protected D dao;
    }
Run Code Online (Sandbox Code Playgroud)