@Autowired和@Resource的区别是?

前情回顾

  • 正确使用@Autowired

    • @Autowired 注解在构造器上的使用规则(字段注入也挺好的)
  • 正确使用@Resource

来源不同

  • @Autowired的“爹”是Spring

  • @Resource的“爹”是Java(JSR-250)

    • 这是一个规范,Spring对这个注解进行了支持。
    • 如果换了其他的框架,大概率用不了@Autowired(除非兼容了),大概率能用@Resource(毕竟是Java规范,框架应该会支持的)

当然了,这一点了解下就行了。毕竟实际开发中用的框架是Spring,这两个注解都能用。

查找bean的方式不同(重点)

简单

  • @Autowired:根据类型去查找bean,如果找到了多个,那么再根据名称去选择注入哪一个。

    • 找到了多个,名称是helloService,不匹配,因此不知道注入哪一个。

      image

    • 将名称换成helloServiceImpl1,就能唯一匹配bean了。而且IDEA会提示实际注入了哪个bean(见下图的小红框。)

      image

      虽然cursor很猛,但在Java领域,IDEA还是王者啊。

    • 不过,一般会用另一个注解来指定名称:

      /*** @author: Forrest* @since: 2025/3/15*/
      @RestController
      public class HelloController {@Qualifier("helloServiceImpl2")@Autowiredprivate HelloService helloService;@GetMapping("/hello")public String hello() {return helloService.sayHello();}
      }
      
      • 这个还是有使用场景的,例如要重构了,从helloServiceImpl1切换为helloServiceImpl2。当然了,如果很多地方都用到了helloService,这样修改是不方便的,应该在helloService的实现中完成路由,即helloServiceImpl1内部切换为helloServiceImpl2。(这样想,Service层的约定:接口 + 实现,非常鸡肋…)

  • @Resource:根据名称去查找bean,未找到,再根据类型去查找,如果找到多个,会抛异常。

    image

    image

    左侧查看实际注入时,会发现有两个bean。

    • 指定名称:

      image

    • 用@Qualifier更合适

      /*** @author: Forrest* @since: 2025/3/15*/
      @RestController
      public class HelloController {@Qualifier("helloServiceImpl2")@Resourceprivate HelloService helloService;@GetMapping("/hello")public String hello() {return helloService.sayHello();}
      }
      

进阶

@Autowired、@Resource都支持@Primary(Spring Boot 3.3.7)
  • 上文提到:@Autowired先根据类型去查找bean,如果找到了多个,选哪一个呢?

    • 如果多个bean中,有的bean被打上了@Primary,那么选这个bean。​

      image​​

      image

    • 如果多个bean都被打上了@Primary呢?那继续根据名称来筛选。

  • 对于@Resource,优先按照名称去匹配,如果存在多个,那么匹配被打上@Primary的bean。

要彻底搞明白,还得去看这一块的源码(埋坑)

使用范围不同(挺重要)

特性@Autowired@Resource
注解位置可以注解在字段、构造方法、Setter方法及方法参数上可以注解在字段、Setter方法上
集合类型注入支持,可以用于注入集合类型(如List<XXX>​),自动注入所有符合类型的Bean也支持
数组类型注入支持,可以用于注入数组类型,自动注入所有符合类型的Bean也支持
构造方法注入支持,可以用于构造方法参数的注入不支持构造方法注入

注解的参数不同

特性@Autowired@Resource
支持的参数只支持required​一个参数支持name​、type​等7个参数
依赖存在性默认依赖的Bean必须存在,可以通过required=false​设置为非必须默认依赖的Bean必须存在,不存在会抛出异常
  • @Autowired(required = false) 不是说就不注入依赖了,而是一旦注入失败了, 那就不注入了。也就是不要因为弱依赖而影响了主流程。

  • 对于@Resource,用的最多的是name​、type​。

    • @Resource默认是按名称去查找bean的,因此,最好用name明确这个名称。

      @Resource(type = HelloServiceImpl1.class)
      private HelloService helloService;
      

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.9/Q2,Charls最新文章解读!

文章题目&#xff1a;Association between remnant cholesterol and depression in middle-aged and older Chinese adults: a population-based cohort study DOI&#xff1a;10.3389/fendo.2025.1456370 中文标题&#xff1a;中国中老年人残留胆固醇与抑郁症的关系&#xff1…

无再暴露源站!群联AI云防护IP隐匿方案+防绕过实战

一、IP隐藏的核心原理 群联AI云防护通过三层架构实现源站IP深度隐藏&#xff1a; 流量入口层&#xff1a;用户访问域名解析至高防CNAME节点&#xff08;如ai-protect.example.com&#xff09;智能调度层&#xff1a;基于AI模型动态分配清洗节点&#xff0c;实时更新节点IP池回…

项目开发 1-确定选题,制作原型

一、AI问答 问&#xff1a; 作为计算机专家&#xff0c;密码学家&#xff0c;给研究生一年级学生设计20个实践项目&#xff0c;具体要求如下&#xff1a; 一. 总体要求 必须使用 Linux 系统调用&#xff0c;要求使用文件I/O,多进程或多线程&#xff0c;一定要用到 Socket 系统…

使用SetupTools 管理你的项目打包工作

Setuptools 是一个用于 Python 的包管理工具&#xff0c;主要用于构建、打包和分发 Python 软件包。它是 distutils 的增强版&#xff0c;提供了更多的功能和灵活性&#xff0c;是 Python 包管理的核心模块之一。 功能与特点 依赖管理&#xff1a;Setuptools 提供了强大的依赖…

人工智能与人的智能,改变一生的思维模型【8】逆向思维

逆向偏差思维模型&#xff1a;顶尖高手如何「反常识」破局 &#xff08;斯坦福决策科学中心认证的逆向思考框架&#xff09; 一、直击本质&#xff1a;什么是逆向偏差思维&#xff1f; 定义&#xff1a; 逆向偏差思维是一种主动对抗本能认知倾向的决策模式&#xff0c;通过系…

YOLO优化之扫描融合模块(SimVSS Block)

研究背景 在自动驾驶技术快速发展的背景下,目标检测作为其核心组成部分面临着严峻挑战。 驾驶场景中目标尺度和大小的巨大差异 ,以及 视觉特征不显著且易受噪声干扰 的问题,对辅助驾驶系统的安全性构成了潜在威胁。 传统的卷积神经网络(CNN)虽然在目标检测领域取得了显著…

(全)2024下半年真题 系统架构设计师 综合知识 答案解析01

系统架构设计师第二版教程VIP课程https://edu.csdn.net/course/detail/40283 操作系统 下列选项中不能作为预防死锁措施的是 。 A. 破坏“循环等待"条件 B. 破坏“不可抢占”条件 C. 破坏“互斥”条件 D. 破坏“请求和保持”条件 答案&#xff1a;C 解析&…

通义万相 2.1 + 蓝耘算力,AI 视频生成的梦幻组合

在这个科技日新月异的时代&#xff0c;人工智能不断刷新着我们对世界的认知。一次偶然的机会&#xff0c;我借助北京蓝耘科技股份有限公司提供的算力支持&#xff0c;踏上了使用通义万相 2.1 进行 AI 视频生成的奇妙之旅。 目录 1.1初遇蓝耘科技&#xff1a; 1.2通义万相 2.1…

链表·简单归并

cur->next la; //将 p指针所指向的链表节点的 next 指针&#xff08;也就是 p 节点的下一个节点的指针&#xff09;指向 l1 所指向的链表节点。简单来说&#xff0c;就是把 la 节点连接到 p 节点的后面&#xff0c;更新了链表的连接关系。 p la; //将p指针的值更新为 la …

kmp报错→Cannot find skiko-windows-x64.dll.sha256

1、前言 学习kmp&#xff08;Kotlin MultiPlatform简称&#xff09;过程中报了错误&#xff0c;这个报错在直接运行desktop的main方法才会出现&#xff0c;用gradle运行却不会报错&#xff0c;新建的kmp项目也不会出现&#xff0c;我学习的写了一些代码的项目才会出现。   运…

MySQL(事物下)

目录 一 多版本并发控制&#xff08; MVCC &#xff09;是一种用来解决 读-写冲突 的无锁并发控制 1. 前置知识 示例&#xff1a; 二 Read View 1. 当事物进行快照读(读历史数据)会MySQL会创建一个Read Vidw类对象&#xff0c;用来记录和当前一起并发的事物(活跃的事物)&a…

星型组网模块的两种交互方式优缺点解析

星型组网模块简介 星型组网模块工作在433MHz频段&#xff1b;星型组网模块集主机&#xff08;协调器&#xff09;、终端为一体&#xff0c;星型组网模块具有长距离、高速率两种传输模式&#xff0c;一个主机&#xff08;协调器&#xff09;支持多达200个节点与其通讯&#xff0…

IMX6ULL学习整理篇——UBoot的一些基础知识(1.编译流程)

前言 笔者整理了最近刷IMX6ULL的一些学习笔记&#xff0c;这里打算稍微整理一下东西发上来作为作为一个补充 正文 大部分而言&#xff0c;当我们拿到源码的时候&#xff0c;一般都是——先使用make来生成一份针对我们目标开发板的配置。举个例子&#xff0c;正点原子针对他们…

docker桌面版启动redis,解决无法连接

docker run -d --name redis -p 6379:6379 -v E:\2\redis\redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf 在本地创建一个目录&#xff0c;里面有个redis.conf文件&#xff0c;内容如下&#xff0c;启动时绑定这个配置文件目…

2025-03-15 学习记录--C/C++-PTA 习题3-3 出租车计价

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 习题3-3 出租车计价 本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下&#xff1…

《C++ Primer》学习笔记(二)

第二部分&#xff1a;C标准库 1.为了支持不同种类的IO处理操作&#xff0c;标准库定义了以下类型的IO&#xff0c;分别定义在三个独立的文件中&#xff1a;iostream文件中定义了用于读写流的基本类型&#xff1b;fstream文件中定义了读写命名文件的类型&#xff1b;sstream文件…

数据类设计_图片类设计之6_混合图形类设计(前端架构)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论混合图形类设计 方法论-现在能做什么 这段属于聊天内容---有句话是这么说的&#xff1a;不要只埋头拉车&#xff0c;还要抬头看路。写代码也是…

招聘信息|基于SprinBoot+vue的招聘信息管理系统(源码+数据库+文档)

招聘信息管理系统 目录 基于SprinBootvue的招聘信息管理系统 一、前言 二、系统设计 三、系统功能设计 5.1系统功能模块 5.2管理员功能模块 5.3企业后台管理模块 5.4用户后台管理模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

【软件】免费的PDF全文翻译软件,能保留公式图表的样式

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 很多PDF全文翻译软件都是收费的&#xff0c;而划线翻译看着又很累。这个开源的PDF全文翻译软件非常好用&#xff0c;并且能够保留公式、图表、目录和注…

79.HarmonyOS NEXT 手势操作模型详解:移动、缩放与旋转的实现原理

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT 手势操作模型详解&#xff1a;移动、缩放与旋转的实现原理 文章目录 HarmonyOS NEXT 手势操作模型详解&#xff1a;移动、缩放与旋…