装配注解@Autowired 的问题

装配注解@Autowired 的问题

老师我想问下 @Autowired 应该也是不光根据类型来查找类吧,应该还根据bean name 来识别吧

我截图中两个类实现一个接口,在service 中装配注解注入对象我发现一个问题

1.当UserService 类中   对象名是userDao,当ioc 初始化时,getBean()后还是能注入对应UserDao类对象,但是当变成private IUserDao uDao 时 初始化容器后getbean 就会报but found 2: userDao,userOracleDao  的错误

IUserDao


https://img1.sycdn.imooc.com//climg/62669e90090e03dc00000000.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小小 2022-04-26 13:30:17

同学你好,是的。@Autowired默认是根据类型进行自动装配的,当存在多个满足条件的 Bean 时,会根据名称进行注入。当声明为private IUserDao userDao时,存在两个此类型的Bean故会按照名称进行注入,会将UserDao对象注入;但当声明为private IUserDao uDao时,项目中存在两个IUserDao类型的Bean且不存在名为uDao的bean则会注入失败,出现报错提示“but found 2: userDao,userOracleDao”

祝学习愉快~

  • 提问者 慕无忌4072121 #1

    那@Resource 也是先根据名称来匹配如果找不到再按类型匹配 ,那@Resource 和@Autowired 主要区别是啥呢?

    2022-04-26 14:33:36
  • 好帮手慕小小 回复 提问者 慕无忌4072121 #2

    同学你好,@Autowired默认按照类型byType自动装配,@Resource默认按照名称byName自动装配。

    二者区别可参考课程的图文章节:https://class.imooc.com/lesson/2268#mid=52868,若仍有疑问可在问答区继续提问。

    祝学习愉快~

    2022-04-26 16:06:10
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师