文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

浅谈Spring框架中@Autowired和@Resource的区别

2022-11-13 19:02

关注

前言

写过Spring框架的同学应该都知道,Spring当中使用字段注入的时候既可以用 @Autowired 又可以用 @Resource,但是当我使用 @Autowired,idea会提示我说,不建议使用字段注入:

但如果我用的是 @Resource,就不会有这样的提示:

于是在好奇心的驱使下,我探究了一下他们两者的区别,并了解了为什么idea会对 @Autowired 发出弱警告,在这里分享给大家。

默认注入方式不同

提供者不同

@Autowired 是spring提供的注解,@Resource 是JDK提供的注解。其实这也是为什么idea会对 @Autowired 发出警告,而不会对@Resource发出警告的原因。

根据我查阅的一些资源和一点个人理解,得出以下分析:

@Autowired 是Spring提供的,它只能适用于Spring,是特定IOC提供的特定注解,这就导致了程序和框架的强耦合,一旦换用了其他的IOC框架,就会导致失效,无法支持注入。而 @Resource 是Java提供的一种标准,一般的IOC容器应该去主动对 @Resource 做兼容,这样我们即使换了其他的框架,也可以正常使用字段注入的功能。

不过话又说回来,我们在搭建一个项目的时候,刚开始选好框架了,以后很大可能就不会再去更换为其他的框架了,即使字段注入松耦合了,但其实还有其他更多的东西需要去修改,所以我个人认为用这两个都可以,具体使用哪个还得看公司的编码规范,个人项目的话,统一使用一个就好了。

补充:@Resource的装配顺序如下

如果同时指定了name和type,流程如下:

如果指定了name,流程如下:

只是指定了@Resource注解的name,则按name后的名字去bean元素里查找有与之相等的name属性的bean。

 如果指定了type,流程如下:

只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。

如果既没有指定name,也没有指定type,流程如下:

既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行进行查找,如果找到就注入。

总结

到此这篇关于Spring框架中@Autowired和@Resource区别的文章就介绍到这了,更多相关Spring @Autowired和@Resource区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯