当前位置: 首页 > news >正文

【Springboot】@Autowired和@Resource的区别

【Springboot】@Autowired和@Resource的区别

  • 【一】定义
    • 【1】@Autowired
    • 【2】@Resource
  • 【二】区别
    • 【1】包含的属性不同
    • 【2】@Autowired默认按byType自动装配,而@Resource默认byName自动装配
    • 【3】注解应用的地方不同
    • 【4】出处不同
    • 【5】装配顺序不用
      • (1)@Autowired的装配顺序如下
      • (2)@Resource的装配顺序如下
  • 【三】@Autowired使用案例
    • (1)参数
    • (2)取bean逻辑
    • (3)只使用@Autowired注解,InjectTestController注入InjectTestService
    • (4)@Autowired注解和@Qualifier注解配合使用,InjectTestController注入InjectTestService
    • (5)@Autowired注解和@Primary注解配合使用,InjectTestController注入InjectTestService
    • (6)@Resource

【一】定义

@Resource 和@Autowired 这两个注解的作用都是在Spring 生态里面去实现Bean 的依赖注入。

【1】@Autowired

对类成员变量、方法和构造函数进行标注,完成自动装配的工作

【2】@Resource

在语义上被定义为通过唯一的名称来标识特定的目标组件,其中声明的类型与匹配过程无关

【二】区别

在spring框架中,如果在service层需要注入其他依赖的对象,通常我们都会使用@Autowired或者@Resource注解。@Autowired跟Spring框架强耦合了,如果换成其他的框架,@Autowired就没有作用了,而@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持

【1】包含的属性不同

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

public @interface Autowired {//是否开启自动注入,有些时候我们不想使用自动装配功能,可以将该参数设置成false。boolean required() default true;
}public @interface Resource {//bean的名称String name() default "";String lookup() default "";//Java类,被解析为bean的类型Class<?> type() default java.lang.Object.class;enum AuthenticationType {CONTAINER,APPLICATION}// 身份验证类型AuthenticationType authenticationType() default AuthenticationType.CONTAINER;//组件是否可以与其他组件之间共享boolean shareable() default true;String mappedName() default "";//描述String description() default "";
}

【2】@Autowired默认按byType自动装配,而@Resource默认byName自动装配

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

【3】注解应用的地方不同

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

【4】出处不同

@Autowired是Spring定义的注解,而@Resource是JSR-250定义的注解,所以@Autowired只能在spring框架下使用,而@Resource则可以和其他框架一起使用

【5】装配顺序不用

(1)@Autowired的装配顺序如下

@Autowired默认先按byType进行匹配,如果发现找到多个bean,则又按照byName方式进行匹配,如果还有多个,则报出异常。
在这里插入图片描述

(2)@Resource的装配顺序如下

(1)如果同时指定了name和type,流程如下:
在这里插入图片描述
(2)如果指定了name,流程如下:
只是指定了@Resource注解的name,则按name后的名字去bean元素里查找有与之相等的name属性的bean。
在这里插入图片描述
(3)如果指定了type,流程如下:
只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。
在这里插入图片描述
(4)如果既没有指定name,也没有指定type,流程如下:
既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行进行查找,如果找到就注入。
在这里插入图片描述

【三】@Autowired使用案例

(1)参数

@Autowired 注解里面有一个 required 属性默认值是 true,表示强制要求bean实例的注入, 在应用启动的时候,如果 IOC 容器里面不存在对应类型的Bean,就会报错。当然,如果不希望自动注入,可以把这个属性设置成 false。

(2)取bean逻辑

如果在容器中有多个相同类型的Bean,使用@Autowired注入Bean,则去找名称和注入属性的属性名相同的Bean,如果能找到唯一的,则注入成功,否则应用启动的时候就会报错,大概意思是指注入只需要一个Bean实例,但在容器中找到了多个(容器不知道该注入那个Bean)。为了解决问题,需要配合@Qualifier注解使用。@Qualifier注解可以从多个相同类型的Bean里筛选出一个Bean名称和@Qualifier注解的value属性相同的Bean。如果容器中恰好找到一个这样的Bean,则应用启动的时候成功注入这个Bean实例。同样的,当有多个同类型的Bean时,@Parimary标注的Bean作为主要的Bean会被优先注入。

(3)只使用@Autowired注解,InjectTestController注入InjectTestService

/* InjectTestController注入InjectTestService,此时容器中
有两个InjectTestService类型的Bean(injectTestService,injectTestServiceImpl)。
因为注入属性的属性名为injectTestService,
容器中恰好存在一个名称为injectTestService的Bean,
所以名称为injectTestService的Bean可以成功注入到属性injectTestService,
应用启动不报错。*/@Controller
public class InjectTestController {@Autowiredprivate InjectTestService injectTestService;
}@Configuration
public class BeanConfig {@Beanpublic InjectTestService injectTestService(){return new InjectTestServiceImpl();}
}@Service
public class InjectTestServiceImpl implements InjectTestService {
}

(4)@Autowired注解和@Qualifier注解配合使用,InjectTestController注入InjectTestService

/* 容器中存在两个类型为InjectTestService的Bean(injectTestService,injectTestServiceImpl),
但经过@Qualifier的value属性筛选,找到了名称为injectTestServiceImpl的Bean,
因此可以成功注入到属性service中 */@Controller
public class InjectTestController {@Autowired@Qualifier("injectTestServiceImpl")private InjectTestService service;
}@Configuration
public class BeanConfig {@Beanpublic InjectTestService injectTestService(){return new InjectTestServiceImpl();}
}@Service
public class InjectTestServiceImpl implements InjectTestService {
}

(5)@Autowired注解和@Primary注解配合使用,InjectTestController注入InjectTestService

/* 容器中存在两个类型为InjectTestService的Bean(injectTestService,injectTestServiceImpl),
但@Primary注解指定名称为injectTestService的Bean为主Bean,在多个同类型的Bean的时候会优先注入
因此可以成功注入到属性service中 */@Controller
public class InjectTestController {@Autowiredprivate InjectTestService service;
}@Configuration
public class BeanConfig {@Bean@Primarypublic InjectTestService injectTestService(){return new InjectTestServiceImpl();}
}@Service
public class InjectTestServiceImpl implements InjectTestService {
}

(6)@Resource

@Resource 是 JDK 提供的注解,只是 Spring 在实现上提供了这个注解的功能支持。 它的使用方式和@Autowired 完全相同,最大的差异于@Resource 可以支持ByName 和 ByType 两种注入方式。 如果使用name,Spring就根据bean的名字实现依赖注入,如果使用type,Spring就根据类型实现依赖注入。 如果两个属性都没配置,就先根据定义的属性名字去匹配,如果没匹配成功,再根据类型匹配。两个都没匹配到,就报错。

相关文章:

【Springboot】@Autowired和@Resource的区别

【Springboot】Autowired和Resource的区别 【一】定义【1】Autowired【2】Resource 【二】区别【1】包含的属性不同【2】Autowired默认按byType自动装配&#xff0c;而Resource默认byName自动装配【3】注解应用的地方不同【4】出处不同【5】装配顺序不用&#xff08;1&#xff…...

UIE与ERNIE-Layout:智能视频问答任务初探

内容来自百度飞桨ai社区UIE与ERNIE-Layout&#xff1a;智能视频问答任务初探&#xff1a; 如有侵权&#xff0c;请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …...

数据结构:树

树的基本定义&#xff1a; 树是一种数据结构&#xff0c;它是由n&#xff08;n>1&#xff09;个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; …...

docker 怎么启动nginx

在Docker中启动Nginx容器是一个简单的过程。以下是启动Nginx容器的步骤&#xff1a; 拉取Nginx镜像&#xff1a; 首先&#xff0c;你需要从Docker Hub拉取Nginx的官方镜像。使用以下命令&#xff1a; docker pull nginx运行Nginx容器&#xff1a; 使用docker run命令来启动一个…...

【智商检测——DP】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M 110; int f[N][M]; int main() {int n, k;cin >> n >> k;for(int i 1; i < n; i){int x;cin >> x;f[i][0] __gcd(f[i-1][0], x);for(int j 1; j < min(i, k)…...

YOLOv11改进,YOLOv11添加SAConv可切换空洞卷积,二次创新C3k2结构

摘要 作者提出的技术结合了递归特征金字塔和可切换空洞卷积,通过强化多尺度特征学习和自适应的空洞卷积,显著提升了目标检测的效果。 理论介绍 空洞卷积(Atrous Convolution)是一种可以在卷积操作中插入“空洞”来扩大感受野的技术,更有效地捕捉到图像中的大范围上下文…...

使用R语言优雅的获取任意区域的POI,道路,河流等数据

POI是“Polnt of Information”的缩写&#xff0c;中文可以翻译为“信息点”。是地图上任何非地理意义的有意义的点&#xff0c;如商店&#xff0c;酒吧&#xff0c;加油站&#xff0c;医院&#xff0c;车站等。POI&#xff0c;道路网&#xff0c;河流等是我们日常研究中经常需…...

【设计模式】工厂方法模式 在java中的应用

文章目录 1. 引言工厂方法模式的定义 2. 工厂方法模式的核心概念工厂方法模式的目的和原理与其他创建型模式的比较&#xff08;如简单工厂和抽象工厂&#xff09; 3. Java中工厂方法模式的实现基本的工厂方法模式结构示例代码&#xff1a;创建不同类型的日志记录器 4. 工厂方法…...

Pytest框架学习20--conftest.py

conftest.py作用 正常情况下&#xff0c;如果多个py文件之间需要共享数据&#xff0c;如一个变量&#xff0c;或者调用一个方法 需要先在一个新文件中编写函数等&#xff0c;然后在使用的文件中导入&#xff0c;然后使用 pytest中定义个conftest.py来实现数据&#xff0c;参…...

【面试开放题】挫折、问题、擅长、应用技能

1. 项目中遇到的最大挫折是什么&#xff1f;你是如何应对的&#xff1f; 解答思路&#xff1a; 这个问题通常考察你的问题解决能力、抗压能力和团队协作精神。回答时&#xff0c;可以从以下几个角度展开&#xff1a; 问题背景&#xff1a; 描述项目中遇到的具体挑战。是技术难…...

CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(没思路了)

通过网盘分享的文件&#xff1a;如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…...

C++学习日记---第16天

笔记复习 1.C对象模型 在C中&#xff0c;类内的成员变量和成员函数分开存储 我们知道&#xff0c;C中的成员变量和成员函数均可分为两种&#xff0c;一种是普通的&#xff0c;一种是静态的&#xff0c;对于静态成员变量和静态成员函数&#xff0c;我们知道他们不属于类的对象…...

SOA、分布式、微服务之间的关系和区别?

在当今的软件开发领域&#xff0c;SOA&#xff08;面向服务架构&#xff09;、分布式系统和微服务是三个重要的概念。它们各自有着独特的特性和应用场景&#xff0c;同时也存在着密切的关系。以下是关于这三者之间关系和区别的详细分析&#xff1a; 关系 分布式架构的范畴&…...

java基础概念46-数据结构1

一、引入 List集合的三种实现类使用了不同的数据结构&#xff01; 二、数据结构的定义 三、常见的数据结构 3-1、栈 特点&#xff1a;先进后出&#xff0c;后进先出。 java内存容器&#xff1a; 3-2、队列 特点&#xff1a;先进先出、后进后出。 栈VS队列-小结 3-3、数组 3-…...

Node.js-Mongodb数据库

MongoDB MongoDB是什么&#xff1f; MongoDB是一个基于分布式文件存储的数据库 数据库是什么&#xff1f; 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的应用程序&#xff08;软件&#xff09; 数据库作用&#xff1f; 对数据进行增、删…...

STM32 ADC --- 知识点总结

STM32 ADC — 知识点总结 文章目录 STM32 ADC --- 知识点总结cubeMX中配置注解单次转换模式、连续转换模式、扫描模式单通道采样的情况单次转换模式&#xff1a;连续转换模式&#xff1a; 多通道采样的情况禁止扫描模式&#xff08;单次转换模式或连续转换模式&#xff09;单次…...

技术创新与人才培养并重 软通动力子公司鸿湖万联亮相OpenHarmony人才生态大会

11月27日&#xff0c;由开放原子开源基金会指导&#xff0c;OpenHarmony项目群工作委员会主办的OpenHarmony人才生态大会2024在武汉隆重举办。软通动力子公司鸿湖万联作为OpenHarmony项目群A类捐赠人应邀出席。大会期间&#xff0c;鸿湖万联不仅深度参与了OpenHarmony人才生态年…...

兔子繁衍问题

7-2 兔子繁衍问题 分数 15 全屏浏览 切换布局 作者 徐镜春 单位 浙江大学 一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死&#xff0c;请问第1个月出生的一对兔子&#xff0c;至少需要繁衍到第几个月时兔…...

汉代风云人物 1晁错

晁错曾是汉景帝的老师。汉景帝登基后&#xff0c;晁错提出削藩建议&#xff0c;这一举措遭到诸多藩国诸侯的强烈反对&#xff0c;由此引发了紧张局势。 袁盎此前曾担任吴国的宰相&#xff0c;晁错觉得袁盎与吴国等藩国关系密切&#xff0c;很可能知晓藩王们谋反的相关情况却没…...

学习threejs,使用specularMap设置高光贴图

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshPhongMaterial高…...

UniAppX项目数据可视化升级:用lime-echart + ECharts打造高性能图表(从Vue2/Vue3到uni-app-x全流程)

UniAppX高性能数据可视化实战&#xff1a;lime-echart与ECharts的深度整合指南 当移动端数据可视化需求遭遇性能瓶颈时&#xff0c;UniAppX框架与lime-echart的组合正在成为技术决策者的新选择。本文将揭示如何在不同技术栈中实现图表渲染性能的突破性提升&#xff0c;从原理剖…...

别再死记硬背了!用Python脚本+Modbus Poll工具,5分钟搞懂Modbus功能码怎么用

用PythonModbus Poll实战&#xff1a;5分钟解锁功能码核心逻辑 第一次接触Modbus协议时&#xff0c;那些晦涩的功能码总让我头疼——01H、03H、05H这些十六进制代码就像天书&#xff0c;文档里的理论描述看完就忘。直到我发现用Python脚本配合Modbus Poll工具进行实操测试&…...

Lobe Theme:为Stable Diffusion WebUI注入现代设计美学的终极界面解决方案

Lobe Theme&#xff1a;为Stable Diffusion WebUI注入现代设计美学的终极界面解决方案 【免费下载链接】sd-webui-lobe-theme &#x1f92f; Lobe theme - The modern theme for stable diffusion webui, exquisite interface design, highly customizable UI, and efficiency …...

ElasticSearch集群搭建步骤

文章目录一、前言二、使用 RPM 安装 Elasticsearch导入 Elasticsearch GPG 密钥从 RPM 存储库安装三、设置基本安全性生成证书使用TLS加密节点间通信四、为 Elasticsearch 加密 HTTP 客户端通信五、配置集群编辑 elasticsearch.yml&#xff08;通用配置&#xff09;关键性能参数…...

[特殊字符]空间智能目标追踪系统:从“看视频”到“掌控空间”的技术跃迁——多模态识别 × 空间建模 × 轨迹预测,让视频系统具备“感知与决策能力”[特殊字符] 视频系统的终极形态,不是记录世

&#x1f6a8;空间智能目标追踪系统&#xff1a;从“看视频”到“掌控空间”的技术跃迁——多模态识别 空间建模 轨迹预测&#xff0c;让视频系统具备“感知与决策能力”&#x1f4a5; 视频系统的终极形态&#xff0c;不是记录世界&#xff0c;而是理解世界。一、系统定位&am…...

SQLancer:自动化数据库测试的效能革命

SQLancer&#xff1a;自动化数据库测试的效能革命 【免费下载链接】sqlancer Automated testing to find logic and performance bugs in database systems 项目地址: https://gitcode.com/gh_mirrors/sq/sqlancer 在数据库系统的开发与维护中&#xff0c;逻辑缺陷和性能…...

ANPC逆变器下垂控制的“阻抗相消术

ANPC-下垂功率均分-两台ANPC三电平逆变器在不同阻感性线路阻抗下实现有功均分与无功均分&#xff0c;采用积分改进法&#xff08;阻抗相消法&#xff09;&#xff0c;电压电流双闭环控制&#xff0c;中点电位平衡控制&#xff0c;SPWM调制。 1.下垂&#xff0c;电压电流双闭环控…...

Qwen3.5-4B-Claude-Opus保姆级教程:Web界面响应延迟归因与优化路径

Qwen3.5-4B-Claude-Opus保姆级教程&#xff1a;Web界面响应延迟归因与优化路径 1. 模型与部署环境概览 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型&#xff0c;特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该…...

美国是如何对GEO进行监管的?

一、GEO投毒并不是中国独有 2026年央视“315”晚会首次把“GEO投毒”这一灰色产业链推到台前。所谓“投毒”&#xff0c;说白了&#xff0c;就是有人通过批量制造虚假信息、污染训练或检索数据&#xff0c;去干扰AI的推荐和回答结果&#xff0c;最后把一些虚假、低质甚至根本不…...

告别“替身攻击”:手把手教你用零阶优化(ZOO)直接黑盒攻击DNN模型

零阶优化实战&#xff1a;无需替代模型的黑盒对抗攻击指南 当面对一个部署在云端的深度学习API时&#xff0c;传统白盒攻击手段往往束手无策——既无法获取模型架构&#xff0c;也不能执行反向传播。本文将揭示如何运用零阶优化技术&#xff0c;仅通过输入输出查询就能构造高效…...