我有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';
答案 0 :(得分:0)
将您的@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")