[Spring学习]08 @Resource和@Autowired注解的区别
目录
- 前言
- 一、@Resource和@Autowired注解的身世
- 1、@Resource注解
- 2、@Autowired注解
- 3、常见的三种依赖注入方式及区别
- 1. Filed注入
- 2. Setter注入
- 3. Constructor注入
- 4. 三种依赖注入方式的区别
- 二、@Resource和@Autowired注解的区别
- 三、@Resource和@Autowired注解的推荐用法
前言
当我们在属性上使用@Autowired的时候,IDEA会曝黄色的警告,如下图所示:
你如果问老员工应该怎么办时,一般会让你换成@Resource注解,问其原因,可能大部分人都不太讲的清楚。
一、@Resource和@Autowired注解的身世
要弄清楚,就要先了解@Resource和@Autowired注解的身世。
1、@Resource注解
@Resource注解,由2006年5月的 JSR 250(Java) 发布 。
@Resource注解的官方介绍:
1、标记了应用程序需要的资源。
2、可以应用于应用程序组件类或者组件类的字段或方法。
3、当应用于字段或方法时,容器将在组件初始化时将所请求资源的实例注入到应用程序组件中。
3、如果应用于组件类,则注释声明应用程序将在运行时查找的资源。
2、@Autowired注解
@Autowired注解,由2007年11月19日的 Spring2.5 发布。
@Autowired注解的官方介绍:
1、将构造函数、字段、设置方法或者配置方法标记为由 Spring 的依赖注入工具自动装配。
3、常见的三种依赖注入方式及区别
@Autowired注解IDEA为什么会曝黄色的警告?
警告的内容为:field injection is not recommended(不推荐使用Field注入),那应该推荐使用什么方式注入呢?
我们先来看下,常见的三种依赖注入方式:
1. Filed注入
2. Setter注入
3. 构造方法注入
1. Filed注入
属性方法(Filed)注入,此方式是使用最多的,因为这种方式使用起来非常简单,代码也非常的简洁。
@Controller
public class HelloController {@Autowiredprivate CourseService courseService;
}
2. Setter注入
普通方法(Setter)注入,就是先写Setter函数,然后在使用到的地方直接调用。
@Controller
public class HelloController {private CourseService courseService;@Autowiredpublic void setCourseService(CourseService courseService) {this.courseService = courseService;}
}
3. Constructor注入
构造方法(Constructor)注入,就是使用构造函数的方法实现。
@Controller
public class HelloController {private final CourseService courseService;@Autowiredpublic HelloController(CourseService courseService) {this.courseService = courseService;}
}
4. 三种依赖注入方式的区别
Filed注入,声明不了常量的属性,因为 final 的字段必须在类实例化时去实例化。
Filed注入,在类中很容易有很多依赖。
Filed注入,违反单一原则,当有多个依赖时,不容易看出依赖关系,容易循环依赖。
Filed注入,无法独立于容器之外实例化。
——————————————————————————————————————————————
Setter注入,实现可选依赖。
Setter注入,可以将依赖项部分注入。
Setter注入,可以解决循环依赖。
Setter注入,自己开发的模块推荐使用。
Setter注入,可变的。
——————————————————————————————————————————————
Constructor注入,实现强制依赖。
Constructor注入,只能将依赖项全部注入。
Constructor注入,为创建实例的第一选项。
Constructor注入,可以解决循环依赖。
Constructor注入,是Spring框架极力倡导使用的方式。
Constructor注入,不变的。
——————————————————————————————————————————————
所以,警告的内容为:field injection is not recommended(不推荐使用Field注入),那应该推荐使用什么方式注入呢?
答案是:在Spring框架里面,肯定是极力推荐 Constructor注入的方式。
由于此处使用的是 @Autowired 注解 Filed 注入,为了方便且不报错,所以把 @Autowired 注解改成 @Resource 注解 Filed 注入即可。
二、@Resource和@Autowired注解的区别
区别1:
身世不同:
- @Autowired 出自 Spring 框架,只支持Spring框架。
- @Resource 出自于Java标准:JSR-250,绝大部分框架都支持。
区别2:
注入方式不同:
- @Autowired 支持 Filed 注入、Setter 注入和 Constructor 注入。
- @Resource 只支持 Filed 注入和 Setter 注入。
区别3:
依赖查找顺序不同:
- @Autowired 先根据类型,再根据名称查询。
- @Resource 先根据名称,再根据类型查询。
区别4:
支持的参数不同:
- @Autowired 只支持设置 1 个参数。
- @Resource 支持设置 7 个参数。
三、@Resource和@Autowired注解的推荐用法
@Resource 倾向于确定性的单一资源。
@Autowired 为类型去匹配符合此类型的所有资源。
如集合注入,建议使用 @Autowired。
@Autowired 的推荐用法:
1)使用构造函数注入或者 lombok 的 @RequiredArgsConstructor+private final。
2)使用set注入或者 lombok 的 @Setter。
相关文章:
[Spring学习]08 @Resource和@Autowired注解的区别
目录前言一、Resource和Autowired注解的身世1、Resource注解2、Autowired注解3、常见的三种依赖注入方式及区别1. Filed注入2. Setter注入3. Constructor注入4. 三种依赖注入方式的区别二、Resource和Autowired注解的区别三、Resource和Autowired注解的推荐用法前言 当我们在属…...
前端开发神器VS Code安装教程
✅作者简介:CSDN一位小博主,正在学习前端 📃个人主页:白月光777的CSDN博客 💬个人格言:但行好事,莫问前程 安装VS CodeVS Code简介VS Code安装VS Code汉化结束语💡💡&…...
【Hive进阶】-- Hive SQL、Spark SQL和 Hive on Spark SQL
1.Hive SQL 1.1 基本介绍概念Hive由Facebook开发,用于解决海量结构化日志的数据统计,于2008年贡献给 Apache 基金会。Hive是基于Hadoop的数据仓库工具,可以将结构化数据映射为一张表,提供类似SQL语句查询功能本质:将Hi…...
搭建自己的直播流媒体服务器SRS,以及SRS+OBS直播推拉流使用及配置
一、前言 目前,全球直播带货什么的,成为主流,那如何自己搭建一个直播服务器呢。首先需要一个流媒体服务器,搭建流媒体有很多种方式,如下: 流媒体解决方案 Live555 (C)流媒体平台框…...
Node.js-----使用express写接口
使用express写接口 文章目录使用express写接口创建基本的服务器创建API路由模块编写GET接口编写POST接口CROS跨域资源共享1.接口的跨域问题2.使用cros中间件拒绝跨域问题3.什么是cros4.cros的注意事项5.cros请求的分类JSONP接口1.回顾jsonp的概念和特点2.创建jsonp接口的注意事…...
【Linux修炼】16.共享内存
每一个不曾起舞的日子,都是对生命的辜负。 共享内存一.共享内存的原理二.共享内存你的概念2.1 接口认识2.2演示生成key的唯一性2.3 再谈key三.共享资源的查看3.1 如何查看IPC资源3.2 IPC资源的特征3.3 进程之间通过共享内存进行关联四.共享内存的特点五.共享内存的内…...
JAVA进阶 —— Stream流
目录 一、 引言 二、 Stream流概述 三、Stream流的使用步骤 1. 获取Stream流 1.1 单列集合 1.2 双列集合 1.3 数组 1.4 零散数据 2. Stream流的中间方法 3. Stream流的终结方法 四、 练习 1. 数据过滤 2. 数据操作 - 按年龄筛选 3. 数据操作 - 演员信息要求…...
Linux基础命令大全(上)
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
嵌入式 串口通信
目录 1、通信的基本概念 1.1 串行通信 1.2 并行通信 2、串行通信的特点 2.1 单工 2.2 半双工 2.3 全双工 3、串口在STM32的引脚 4、STM32的串口的接线 4.1 STM32的串口1和电脑通信的接线方式 4.2 单片机和具备串口的设备连接图 5、串口通信协议 6、串口通信…...
C语言函数调用栈
栈溢出(stack overflow)是最常见的二进制漏洞,在介绍栈溢出之前,我们首先需要了解函数调用栈。 函数调用栈是一块连续的用来保存函数运行状态的内存区域,调用函数(caller)和被调用函数…...
【高阶数据结构】红黑树
文章目录1. 使用场景2. 性质3. 结点定义4. 结点旋转5. 结点插入1. 使用场景 Linux进程调度CFSNginx Timer事件管理Epoll事件块的管理 2. 性质 每一个节点是红色或者黑色根节点一定是黑色每个叶子节点是黑色如果一个节点是红色,那么它的两个儿子节点都是黑色从任意…...
网络协议分析期末复习(二)
目录 12. 端口的定义及常见应用对应的端口号 13. UDP协议概述 14.UDP数据报格式及各字段意义 15. UDP-Lite协议概述 16. TCP数据报格式及各字段意义 17. TCP连接建立及协商参数的过程 18. TCP连接释放过程 19. 路由协议分类及各类的具体协议 20. 路由算法常用的度量 2…...
【C++】STL简介 及 string的使用
文章目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件2. string类的使用2.1 C语言中的字符串2.2 标准库中的string类2.3 string类的常用接口说明1. string类对象的常见构造2. string类对象的容量操作3. string类对象的修改操作4. resize和reserve5. 认识迭代器&…...
MySQL事务详解
🏆今日学习目标: 🍀Spring事务和MySQL事务详解 ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加入: …...
ChatGPT背后的技术和多模态异构数据处理的未来展望——我与一位资深工程师的走心探讨
上周,我和一位从业三十余年的工程师聊到ChatGPT。 作为一名人工智能领域研究者,我也一直对对话式大型语言模型非常感兴趣,在讨论中,我向他解释这个技术时,他瞬间被其中惊人之处所吸引🙌,我们深…...
iOS-砸壳篇(两种砸壳方式)
CrackerXI砸壳呢,当时你要是使用 frida-ios-dump 也是可以的; https://github.com/AloneMonkey/frida-ios-dump frida-ios-dump: 代码中需要更改的:手机中的内网ip 密码 等 最后放到我的砸壳路径里: python dump.py -l查看应用…...
linux 基础
1.Shell 命令的格式如下:command -options [argument]command: Shell 命令名称。options: 选项,同一种命令可能有不同的选项,不同的选项其实现的功能不同。argument: Shell 命令是可以带参数的,也可以不带参…...
Java:SpringBoot给Controller添加统一路由前缀
网上的文章五花八门,不写SpringBoot的版本号,导致代码拿来主义不好使了。 本文采用的版本 SpringBoot 2.7.7 Java 1.8目录1、默认访问路径2、整个项目增加路由前缀3、通过注解方式增加路由前缀4、按照目录结构添加前缀参考文章1、默认访问路径 packag…...
Java 基于 JAVE 库 实现 视频转音频的批量转换
文章目录 Java 基于 JAVE 库 实现 视频转音频的批量转换Maven:方案一:代码优化:方案二:示例代码:代码优化:结语Java 基于 JAVE 库 实现 视频转音频的批量转换 实现视频转音频的功能需要使用到一个第三方的 Java 库,叫做 JAVE。JAVE 是一个开源的 Java 库,提供了视频和音频转换…...
Spring容器——基于XML注入
1. 容器:IOC IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序 Spring 通过 IoC 容器来…...
设计模式(二十一)----行为型模式之状态模式
1 概述 【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能…...
一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法
从来没有一个算法让我研究好几天都搞不明白,AP算法算是第一个。弄了好几天,打草纸用了几十页,反复琢磨,最后都怀疑人生了。我觉得网上那么多介绍 AP 的文章,基本上没有一篇能讲明白的。最后我都觉得 AP 的作者可能都没…...
使用mybatis的映射文件操作存储过程
先随便创建一个存储过程 DELIMITER $$ CREATE PROCEDURE getUserNameById (IN i_id BIGINT, OUT o_name VARCHAR(10)) BEGINSELECT u.name INTO o_name FROM tb_user u WHERE id i_id; END $$delimiter $$ : 是将sql语句的结束符号先替换成$$的意思,因为sql是遇到…...
世界上最完美的两个软件,太厉害了!
今天给大家介绍两个软件,一个体现了人类在软件开发流程上的极致,另外一个则体现了程序员个体能力的巅峰。01航天飞机飞控软件先来说第一个,航天飞机飞行控制软件,就是下图这个大家伙。航天飞机重达120吨,还携带着2000吨…...
教你成为比卡卡西还牛逼的全能忍者,全拷贝与分割函数
如何成为一个集雷切,写轮眼侦查和拷贝与一身的卡卡西,下面教你! 目录 第一式——雷切! strtok 第二式——写轮眼侦查! strerror函数 第三式——写轮眼拷贝! memcpy 模拟实现memcpy函数 😎…...
【LeetCode】剑指 Offer(24)
目录 题目:剑指 Offer 47. 礼物的最大价值 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 47. 礼物的…...
javaEE 初阶 — CSS 元素的显示模式与盒模型
文章目录1. 元素的显示模式1.1 块级元素1.2 行内元素1.3 行内元素和块级元素的区别1.4 改变显示模式2. 盒模型2.1 边框2.1.1 边框的粗细2.1.2 边框的颜色2.1.3 边框的风格2.2 内边距2.3 外边距2.3.1 margin 的特殊情况1. 元素的显示模式 1.1 块级元素 常见的元素: h1 - h6 、…...
新星计划-我为什么要写博客?写博客的意义是什么
CSDN的各位友友们你们好,今天千泽要和大家交流一下写博客的意义,并且鼓励大家参加CSDN官方举办的新星计划,这个可以让我们更快的成长,十分有价值.接下来让我们一起开始吧!如果对您有帮助的话希望能够得到您的支持和帮助,我会持续更新的!🚩part1:自我介绍我是一名来自…...
嵌入式学习笔记——STM32的USART收发字符串及串口中断
USART收发字符串及串口中断前言字符串的收发发送一个字符串接收字符串需求利用串口实现printf中断中断是什么前言 上一篇中,介绍了串口收发相关的寄存器,通过代码实现了一个字节的收发,本文接着上面的内容,通过功能函数实现字符串…...
数据分析之Pandas(1)
3.Pandas 文章目录3.Pandas3.1 Pandas基本介绍3.1.1 Pandas的基本数据结构3.1.1.1 Pandas库的Series类型3.1.1.2 Pandas库的DataFrame类型DataFrame初始化DataFrame查看数据3.1.2 Pandas读取数据及数据操作行操作添加一行删除一行列操作增加一列删除一列通过标签选择数据条件选…...
做全套的成都网站/武汉seo网站排名优化
搬运工,来自以前博客上写的文章。 简洁的 Bash Programming 技巧这一系列文章专门介绍 Bash 编程中一些简洁的技巧,帮助大家提供 Bash 编程的效率,目前该系列已经有三篇文章,有兴趣的同学可以继续阅读其它两篇续篇(一&…...
武汉网站设计公司推荐/成都互联网公司排名
已经学会了composer的基础用法,知道composer.json的作用,知道install和update命令的作用。你会使用git,并在github上有一个账号。基本流程:1.在github上创建自己的项目,例如:group2.将项目通过git克隆到本地…...
青岛网站建设在哪/陕西网络营销优化公司
HTTP 错误 403 - 禁止访问,即403 Forbidden:You dont have permission to access / on this server.可能是权限不足引起的问题。解决方法:打开apache的配置文件httpd.conf,逐行检查。找到:复制代码 代码如下:Options F…...
做网站为什么要用源码/百度云盘登录入口
小端模式(Little Endian) 小端模式(Little Endian),也称为Intel顺序。最低有效字节,首先存储。 例如:int16数据0x1234在地址单元中的存储顺序为 例如:int32数据0x57415244在地址单元中的存储顺序为 大端模式(Big Endian) 大端模式(Big Endian),也称为Motoro…...
重庆网站制作设计获客/预测2025年网络营销的发展
我正在并行递归函数,我测得加速不佳.在调试代码时,我注意到在顺序版本中所有内核都在工作.我在一个最小的例子中重现了这种行为,而且我的所有内核的工作负载都是大约90%.我正在使用Java 8(OpenJDK).Java是否在我不知情的情况下自动进行并行化? Java如何做…...
wordpress 函数手册/seo职业技能培训班
由于公司的开发机没有开xdebug拓展,导致var_dump()在浏览器上看很不方便。 因此,加入从thinkphp搬过来的dump()函数。 function dump($var, $echotrue, $labelnull, $stricttrue) {$label ($label null) ? : rtrim($label) . …...