[英]How to set Qualifier on an Implementation that has an interface which extends another interface
我有2个接口A和B,它们扩展了另一个接口C。但是,当我使用@Qualifier(“ aImpl”)时,我从spring获得了不满意的依赖关系
接口
public interface EsResourceLoader { ... }
public interface CommonEsDao extends EsResourceLoader { ... }
public interface CommonModifiedEsDao extends EsResourceLoader { ... }
第一次实施
@Service
public class LBModifiedEsDao implements CommonModifiedEsDao { ... }
第二实施
@Service
public class LBDao implements CommonEsDao {
private CommonModifiedEsDao myDao;
@Autowired
public LBDao(@Qualifier("lBModifiedEsDao") CommonModifiedEsDao myDao) { ...
}
}
控制器抛出异常
@RestController
@RequestMapping{...}
public class IndexAdminController {
private CommonEsDao esDao;
@Autowired
public IndexAdminController(@Qualifier("lBDao")CommonEsDao esDao){ ... }
}
这是例外
Exception encountered during context initialization - cancelling refresh
attempt: org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'indexAdminController': Unsatisfied dependency
expressed through field 'lbDao';
将您的@Qualifier批注投入服务,它应该可以工作。
@Service
@Qualifier("lBModifiedEsDao")
public class LBModifiedEsDao
implements CommonModifiedEsDao { ... }
还有第二种服务
@Service
@Qualifier("lBDao")
public class LBDao implements CommonEsDao {
private CommonModifiedEsDao myDao;
@Autowired
public LBDao(@Qualifier("lBModifiedEsDao") CommonModifiedEsDao myDao) { ...
}
}
现在,Spring应该能够始终正确地对其进行自动接线。 这也很好,因为您可以肯定将始终具有正确的实现。
编辑:就像我在代码中使用@Qualifier
注释所做的那样,可以通过在组件注释中使用名称来实现,即: @Component("myComponent")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.