开发者社区> 问答> 正文

当一个接口有多个实现类时,@Autowired会出问题吗?

@Autowired是按类型进行装配的,那么我一个接口UserInterface,有多个实现类AImpl,BImpl....这些实现类我都加入了Spring容器,当我在一个类中使用如下语句:

@Autowired
private IUserInterface userInterface;

那么按找类型来装配,到底是找到哪个实现类进行装配?
这个地方是不是应该用@Resource(name="...")来装配?

展开
收起
小旋风柴进 2016-03-03 16:10:09 10247 0
2 条回答
写回答
取消 提交回答
  • 这所说的是spring吧。 如果多个实现类都注册为了spring bean,那必然报错,解决办法有几种: 1、修改spring autowired方式由默认的byType改为byName 2、在属性不使用Autowired而使用Resource并指定name
    2019-07-17 18:51:35
    赞同 展开评论 打赏
  • 当容器中存在多个 Bean 的类型与需要注入的相同时,注入将不能执行,我们可以给 @Autowired 增加一个候选值,做法是在 @Autowired 后面增加一个 @Qualifier 标注,提供一个 String 类型的值作为候选的 Bean 的名字

    @Autowired(required=false) //注入不成功也不会发生异常
    @Qualifier("AImpl")
    2019-07-17 18:51:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载