@Reference、@Autowired、@Resource的区别

news2024/11/18 11:49:57

目录

  • 1. @Autowired 和 @Resource 的区别
    • 相同点:
    • 不同点:
    • @Resource 装配顺序
  • 2. @Reference 和 @Autowired 的区别
  • 理解1
  • 理解2
  • 理解3

1. @Autowired 和 @Resource 的区别

相同点:

@Resource 的作用相当于@Autowired ,均可标注在字段或属性的setter方法上。

不同点:

(1)提供方:@Autowired 是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;@Resource 是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。
(2)注入方式:@Autowired 只按照 byType 注入;@Resource 默认按byName自动注入,也提供按照 byType 注入;
(3)属性:@Autowired 按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。@Resource 有两个中重要的属性:name和type。name属性指定byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。需要注意的是,@Resource 如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource 注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

@Resource 装配顺序

  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

推荐使用@Resource 注解在字段上,这样就不用写setter方法了.并且这个注解是属于J2EE的,减少了与Spring的耦合,这样代码看起就比较优雅 。

更多资料:https://www.cnblogs.com/cheari/articles/15035511.html

2. @Reference 和 @Autowired 的区别

理解1

@Autowired 是从本地的spring容器內引入一个物件。

@Resource 的作用相当于@Autowired
只不过@Autowired 按 byType 自动注入,
@Resource 预设按 byName自动注入。

@Reference 是 dubbo 的注解,@Resource 是 spring 的。

@Reference 也是注入,他一般注入的是分散式的远端服务对象,需要dubbo配置使用

总的来说他们的区别:@Reference 注入的是分散式中的远端服务对象,
@Resource@Autowired 注入的是本地spring容器中的物件。

理解2

在这里插入图片描述

理解3

区别1:@Autowired 是spring提供的注解,@Resource 是JDK提供的注解

区别2:@Autowired 默认的注入方式是ByType(根据类型进行匹配),@Resource 默认的注入方式是 ByName (根据名称进行匹配)

区别3: 当一个接口存在多个实现类的情况下,@Autowired 和 @Resource都需要通过名称才能匹配到对应Bean。@Autowired可以通过@Qualifier来显示指定的名称,@Resource 可以通过name来显示指定名称

@Autowired

Autowired 属于 Spring 内置的注解,默认的注入方式为byType(根据类型进行匹配),也就是说会优先根据接口类型去匹配并注入 Bean (接口的实现类)。

@Resource
Resource属于 JDK 提供的注解,默认注入方式为 byName。如果无法通过名称匹配到对应的实现类的话,注入方式会变为byType。

总结

@Autowired功能虽说非常强大,但是也有些不足之处。比如它跟Spring强耦合了,如果换成了其他框架,功能就会失效。而@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。

除此之外,有些场景使用@Autowired无法满足的要求,改成@Resource却能解决问题。

1、@Autowired默认按byType自动装配,而@Resource默认byName自动装配。

2、@Autowired只包含一个参数:required,表示是否开启自动准入,默认是true。而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。

3、@Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。

4、@Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:类、成员变量和方法上。

5、@Autowired是Spring定义的注解,而@Resource是JSR-250定义的注解。

6、二者装配顺序不同

@Autowired

在这里插入图片描述
@Resource
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4、因果法

因果图中的图形符号 恒等。若原因出现,则结果出现;若原因不出现,则结果不出现。非。若原因出现,则结果不出现;若原因不出现,则结果出现。或。若几个原因中有一个出现,则结果出现;若几…

章节8 文本编辑器

8-Linux文本编辑器 文本编辑器 Windows:Notepad(记事本)、Sublime、UltraEdit等 Linux:VI/VIM (最常用)、nano、Emacs、Sed、gedit、Kate等 01 VI和VIM的区别 VI和VIM的区别 VI:Visual In…

C 语言零基础入门教程(十六)

C 位域 如果程序的结构中包含多个开关量,只有 TRUE/FALSE 变量,如下: struct {unsigned int widthValidated;unsigned int heightValidated; } status;这种结构需要 8 字节的内存空间,但在实际上,在每个变量中&#…

云计算|OpenStack发展简史

前言: 一般以open开始的软件都非常的牛逼,例如,OpenCV(人工智能学习库),OpenStack(云计算基础操作系统),openwrt(软路由),openEuler&…

表单设计器

表单设计器目录概述需求:设计思路实现思路分析参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive. happy for h…

vue2.x 富文本编辑器Tinymce的使用

VUE项目版本是2.x,切记: vue2中不能使用tinymce/tinymce-vue为4以上版本; 如果有安装高版本,卸载:npm uninstall tinymce/tinymce-vue 第一步:安装 npm install tinymce5.1.0 -S npm install tinymce/tiny…

费曼学习法——孩子弱点方向的提升和沟通技巧

这一篇虽然是兔年第一篇,但是,先不拜年了,主要是成文时间较短,后面会有一个详细的长篇文字,讨论一些观点和看法。每一个孩子都有弱点的方向,我们是否都要给孩子提升,首先表达一个观点&#xff1…

图论算法基础

图论算法基础有向图有向图的实现方式无向图无向图的实现方式连通图连通分量的定义强连通图和强连通分量的定义弱连通图和单向连通图的定义判断图是否是强连通图,弱连通图还是单项连通图一个很典型的错误代码JAVA实现C实现生成树最小生成树拓扑排序邻接表的实现方式数…

【ShaderGraph】道路引导,小溪流水等UV动画效果

目录 一:创建ShaderGraph文件 二:设置UV动画速度变量 ​三:设置UV动画方向和Tiling变量 ​四:设置贴图属性 五:设置主色MainColor属性 六:最终效果 一:创建ShaderGraph文件 1.在assets下…

css之BFC是什么

在讲BFC之前先来了解一下FC FC-Formatting Context FC全称Formatting Context(格式化上下文),元素在标准流里面都属于一个FC的 官网解释: Boxes in the normal flow belong to a formatting context,which may be block or inline, but not both sim…

指针(基础)

目录 一、内存和地址 二、指针是什么? 三、指针变量的内容 四、指针类型 五、间接访问操作符 (一)易混淆 六、野指针 (一)野指针成因 1. 指针未初始化 2. 指针越界访问 3. 指针指向的空间释放 &…

php xss攻击

文章目录一、什么是xss攻击二、攻击类型三、php相关处理函数1、htmlspecialchars 函数2、htmlentities 函数3、strip_tags 函数一、什么是xss攻击 xss攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执…

make menuconfig分析

在uboot源码顶层目录下,进入scripts/kconfig目录,打开Makefile文件 mconf作为可执行参数,uboot源码顶层目录下的配置文件传递给conf

39_tp6的rce漏洞

tp6的rce漏洞 一、环境搭建 使用docker本地搭建tp6环境 1. 下载镜像 docker pull vulfocus/thinkphp:6.0.122. 端口映射 启动镜像,并将80端口映射到8081端口,防止80端口冲突,运行容器 docker run -it -d -p 8081:80 1fc5d159922e3. 打开网站 默认的网页目录是在public目…

怎么在线识别图片文字?说一个思路

图片中的文字怎么在线识别?很多小伙伴在接收到图片类型的文件时,不知道怎么处理其中记录的信息。打字整理嫌麻烦怕出错的话,可以借助识别软件来处理,下面给大家介绍三种比较好用的工具,希望能解决你的问题。方法一、在…

SAP ADM100-Unit3 系统配置介绍:如何设置配置文件参数

本节将介绍如何改变配置文件参数的值。 1、管理并维护配置文件 如果想去调整配置文件参数,可以使用操作系统特定的编辑器去调整参数。但是,这个过程是有确定风险的,因此用户必须确保这个调整被正确的执行和记录。设置的参数不正确可能导致实例无法启动。因此,SAP系统提供…

JVM学习疑问之——逃逸分析

前言 根据之前安排的jvm学习计划在进行jvm学习,找到了尚硅谷宋红康老师的jvm视频,跟着视频学习、做笔记,学习到了很多,为尚硅谷及宋红康老师点赞。说到这里,虽然我有一键三连,但这么好的视频,我…

(六)redis持久化操作(RDBAOF)

目录 一、RDB(Redis DataBase) 1、简介 2、持久化流程 3、dump.rdb文件 4、配置文件 5、rdb的备份 6、rdb的恢复 7、优势 8、劣势 二、AOF(Append Only File) 1、简介 2、持久化流程 3、AOF和RDB同时开启 4、AOF启动…

HTML中引入CSS样式的第三种方式:链入外部样式表文件

<!-- 第三种方式&#xff1a;链入外部样式表文件&#xff0c;这种方式最常用。 就是将样式写到一个独立的xxx.css文件当中&#xff0c;在需要的网页上直接引入这个xxx.css文件就可以了。 语法格式&#xff1a; <head> …

【自学Docker 】Docker port命令

Docker port命令 概述 docker port命令教程 docker port 命令可以用于列出指定的 Docker容器 的端口映射&#xff0c;或者将容器里的端口映射到宿主机。该命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker port语法 haicoder(www.haicoder.net)# docke…