@Autowired 与@Resource的区别和如何选择

【Springboot】@Autowired和@Resource的区别 Resource 和@Autowired 这两个注解的作用都是在Spring 生态里面去实现Bean 的依赖注入。 阅读详情

@Autowired 与@Resource选择(治好你的强迫症)

spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。
  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Resource装配顺序

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

@Autowired 与@Resource的区别:

1、 @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

2、 @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

@Autowired()
@Qualifier(“baseDao”)
privateBaseDao baseDao;
3、@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

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

@Qualifier注解的作用
@Autowired是根据类型进行自动装配的。如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。如下:

①可能存在多个UserDao实例

@Autowired 
@Qualifier("userServiceImpl") 
public IUserService userService; 

或者

@Autowired
public void setUserDao(@Qualifier("userDao") UserDao userDao) {
  this.userDao = userDao;
}

这样Spring会找到id为userServiceImpl和userDao的bean进行装配。

②可能不存在UserDao实例

@Autowired(required = false) 
public IUserService userService

个人总结:
@Autowired 根据类型type注入,

@Qualifier(“cusInfoService”)//一般作为@Autowired()的修饰用,

@Autowired @Qualifie(“userService”) 两个结合起来可以根据名字和类型注入

@Resource 默认根据名字name注入,其次按照类型搜索,也可以通过name和type属性进行选择性注入

一般@Autowired和@Qualifier一起用,@Resource单独用。

当然没有冲突的话@Autowired也可以单独用

复杂理解:
比如你有这么一个Bean,@service后面括号里默认的属性是Bean的name。

@Service(“UserService”)
public Class UserServiceImpl implements UserService{};

现在你想在UserController 里面使用这个UserServiceImpl

public Class UserController {}

@AutoWire
当使用这个注入的时候上面的 UserServiceImpl 只需要这样写 @Service,这样就会自动找到UserService这个类型以及他的子类型。UserServiceImpl 实现了UserService,所以能够找到它。

缺点:就是当UserService实现类有两个以上的时候,这就造成了冲突,所以要用@AutoWire注入的时候要确保UserService只有一个实现类。

@Resource
默认情况下是按照名称进行匹配,如果没有找到相同名称的Bean,则会按照类型进行匹配,有人可能会想了,这下好了,用这个是万能的了,不用管名字了,也不用管类型了,

缺点:

根据这个注解的匹配效果可以看出,它进行了两次匹配,也就是说,如果你在UserService这个类上面这样写注解,@Service,它会怎么找呢,首先是找相同名字的,如果没有找到,再找相同类型的,而这里的@Service没有写名字,这个时候就进行了两次搜索,显然,速度就下降了许多。也许你还会问,这里的@Service本来就没有名字,肯定是直接进行类型搜索啊。其实不是这样的,UserServiceImpl 上面如果有@Service默认的名字 是这个userServiceImpl,注意看,就是把类名前面的大写变成小写,就是默认的Bean的名字了。一般开发都会自己指定名字,例如:userService

@Resource根据名字搜索是这样写@Resource(“userService”),如果你写了这个名字叫userService,那么UserServiceImpl上面必须也是这个名字,不然还是会报错。

@Autowired @Qualifier(“userService”)

是直接按照名字进行搜索,也就是说,对于UserServiceImpl 上面@Service注解必须写名字,不写就会报错,而且名字必须是@Autowired @Qualifie(“userService”) 保持一致。如果@Service上面写了名字,而@Autowired @Qualifie() ,一样会报错。

说了这么多,可能你有些说晕了,那么怎么用这三个呢,
要实际的工作是根据实际情况来使用的,UserServiceImpl上面可能会这样写 @Service(“userService”),这样通常使用AutoWire和@Resource多一些,bean的名字不用写。

这里的实际工作情况,到底是什么情况呢?

如果你的架构设计师考虑的比较精细,要求比较严格,要求项目上线后的访问速度比较好,这个时候@AutoWire没有@Resource好用,因为@Resource可以根据名字来搜索,是这样写的@Resource(name=“userService”),可以直接写@Resource(“userService”),因为默认byname。

为什么推荐@Resource(name=“userService”)???

因为根据名字搜索是最快的,就好像查数据库一样,根据Id查找最快。因为这里的名字与数据库里面的ID是一样的作用。这个时候,就要求你多写几个名字,工作量自然就增加了。而如果你不用注解,用xml文件的时候,对于注入Bean的时候要求写一个Id,xml文件时候的id就相当于这里的名字。

这个@Autowired @Qualifie(“userService”) 也可以用名字啊,为什么不用呢?

原因很简单,这个有点长,不喜欢,增加工作量。

说了那么多没用,你能做的就是简单直接,什么最方便就用什么,
你就直接用@Resource得了,如果你喜欢用@Autowire也行,不用写名字。

@Autowired 和 @Resource该用哪个? Autowired和@Resource都是用来实现依赖注入的注解,他们二者5点主要的区别:@Autowired来自于Spring框架,@Resource来自于JSR-250@Autowired支持构造方法、属性和Setter方法3中依赖注入方式,@Resource支持属性和Setter方法2中依赖注入方式。@Autowired仅支持设置required一种参数,@Resource可以支持设置nametypeshareablemapperTypelookup,7中参数。@Autowired。 阅读详情

相关推荐

java面试专题之@Autowired和@Resource的区别

1、@Autowired与**@Resource**都可以用来装配bean. 都可以写在字段上,或写在setter方法上。 2、@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下: Java代码@Autowired() @Qualifier(“baseDao”.

web18334137065的博客 308

@Autowired 与@Resource的区别

  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用

诚的博客 6426

@Autowired vs @Resource

Spring 在执行自动装配时,会扫描容器中的 Bean,将目标 Bean 和依赖 Bean 进行匹配并注入。在匹配过程中,Spring 会利用反射机制检查类中的字段或方法,查看是否存在注解标注的自动装配需求,并根据注解的配置决定装配的方式。是 Spring 提供的两种注解,主要用于实现自动装配(自动注入),它们的使用场景与配置方式非常接近,但在一些细节上存在差异。:推荐的注入方式,尤其在有多个依赖的情况下,通过构造方法来注入 Bean,有助于增强代码的可测试性。一起使用,简化冲突 Bean 的选择。

编程神经元的博客 642

用@Autowired 还是@Resource(对比+总结)

@AutoWire //当使用这个注入的时候上面的 UserServiceImpl 只需要这样写 @Service,这样就会自动找到UserService这个类型以及他的子类型。UserServiceImpl 实现了UserService,所以能够找到它。不过这样有一个缺点,就是当UserService实现类有两个以上的时候,这个时候会找哪一个呢,这就造成了冲突,所以要用@AutoWire注入...

qq_42848910的博客 8749

简述@Autowired和@Resource的区别(通俗易懂)

本文章对@Autowired和@Resource两个注解通过典型案例和结论详细简述了它们两个的区别,思路清晰明了!

黄团团的个人博客 6949

matinal:SAP ABAP 关于sftp的发送接收源代码

如果您将目标系统的凭据存储在该 RFC 连接中,您可以安排程序并将其作为后台作业运行:凭据将从 SM59 配置中获取,并且在文件传输期间不会提示您输入它们。这尤其适用于安全问题:您有责任为您的编码添加安全功能,并相应地配置您的系统(例如,保护您的系统免受病毒侵害)。注意:在创建自己的程序时,请特别注意示例代码中以“@CUSTOMER”开头的注释,因为您需要实现自己的逻辑。本说明为您提供示例编码以支持您创建自己的程序。在 STRUST 事务中,您维护了一个 PSE 并导入了您要发送的文件的最终收件人的证书。

matinal 當冬夜漸暖 。公众号:matinal 1333

Spring 注解揭秘:@Autowired 和 @Resource 的用法详解与避坑建议

依赖注入就是把一个对象需要的依赖对象自动赋予给它,而不是手动创建或查找。想象一下,一个对象需要一个“工具”,而你无需自己去创建这个工具,只要告诉 Spring,它就会帮你把这个工具注入进来。依赖注入帮助开发者避免写重复的代码,也提高了程序的可测试性。@Autowired是 Spring 的专有注解,按类型注入,支持构造函数、字段、方法注入,功能强大且灵活。@Resource来自 JSR-250 标准,按名称注入,通常用于跨框架兼容场景。在实际开发中,优先选择@Autowired。

龚小帅的博客 1462

Qt QWebEngine实战:手把手教你将Vue3/React前端项目嵌入C++桌面程序

本文详细介绍了如何利用Qt的QWebEngine模块将Vue3/React前端项目无缝嵌入C++桌面程序,实现现代前端框架与原生C++的深度整合。通过环境准备、项目架构设计、前端适配、Qt端集成、双向通信建立及性能优化等步骤,开发者可以高效构建兼具Web灵活性和本地系统能力的混合应用。

weixin_28736355的博客 390

[spring学习]8、@Autowired和@Resource的区别

@Autowired和@Resource的区别 @Autowired不能指定id进行注入,要指定id进行注入还要使用@Qualifier进行配合才行。而@Resource可以通过name指定id @Autowired的注入顺序是先byType,再byName。@Resource不指定name和type,那么就是先byName,再byType @Autowired支持泛型依赖注入 @Autowired官方已经不再推荐使用,建议使用@Resource...

秃头披风侠的博客 2180

【操作系统】 Operation System 第二章:操作系统基础操作

2.1 操作系统的启动 (1)CPU, I/O, 内存通过总线连接。 (2)DISK:存放OS; BIOS:基本I/O处理系统( basic I/O system); Bootloader: 加载OS到内存中。 (3)当电脑通电时,段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0. (4)POST(加电自检),寻找显卡和执行BIOS。(显示器,键盘…是否...

iwanderu的博客 1万+

19、情境理论中的信息结构解析

本文系统解析了情境理论中的信息结构,从信息元(infon)的基本概念出发,深入探讨了关系结构与简单信息结构的构建方法,分析了标准信息结构所满足的一系列公理(如A1-A14),并阐述了角色、同一性、高阶信息、循环现象、参数适当性及信息元部分性等核心性质。通过具体示例和流程图展示了信息结构的构建过程,并对比了不同公理下的结构差异,最后讨论了该理论在与其他领域融合中的发展趋势及面临的挑战。

book8的博客 79

@Autowired 和 @Resource 都是用于依赖注入(Dependency Injection, DI)的注解,但它们在来源、注入方式和使用场景上有显著区别。以下是两者的详细对比:

都是用于依赖注入(Dependency Injection, DI)的注解,但它们在来源、注入方式和使用场景上有显著区别。)匹配,如果找到多个同类型的 Bean,会尝试按名称(ByName)匹配。表示注入是可选的(找不到 Bean 时不报错,默认为。属性)匹配,找不到时再按类型(ByType)匹配。直接指定要注入的 Bean 名称(无需额外注解)。当有多个同类型 Bean 时,需用。先根据 Bean 的名称(根据 Bean 的类型(

weixin_43680337的博客 317

Vue2 - 最新详细实现网站内部打开预览 office 全套附件,在页面弹窗内解析预览 word文档、excel电子表格、ppt演示文稿(docx|xlsx|pptx|pdf|txt等文件)详细代码

vue2,nuxt2,office,文档,文件,查看预览,弹框预览,下载预览,如何预览pdf文档,打开查看,office全套文档,实现在线预览文件,小程序内预览word文件,手机h5移动端网页,nuxt文档在线预览,预览office最好用的插件,下载查看,Office在线预览,vue-office,vue如何使用vue-office教程示例,word文档,ppt,exce表格,预览电子文件,文档无法解析,打不开,报错,失效,保存下载,vue前端预览并下载doc、xls、pdf、txt及图片,vue2中预览p

🏆 前端领域优质创作者 1万+

深入理解@Autowired和@Resource的区别

详细介绍Java注解中的@Autowired和@Resource的区别以及各自的用法

m0_73982171的博客 1190

基于STM32F1XX 、HAL库的LTR-303ALS-01 环境光传感器驱动应用C语言程序设计

printf("制造商ID: 0x%02X\r\n", LTR303_ReadManufacID());printf("器件ID: 0x%02X\r\n", LTR303_ReadPartID());LTR-303ALS-01是一款数字环境光传感器(ALS),由Lite-On公司生产。printf("LTR-303ALS初始化失败!printf("LTR-303ALS初始化成功!printf("数据无效\r\n");* @param mode: 0-待机, 1-激活。

PP_Cottage的博客 1033

模型瘦身术:YOLOv5无损剪枝实战教程

本文介绍了一种YOLOv5模型的无损剪枝方法,通过"稀疏训练+结构化剪枝+微调"的流程,在不损失精度的前提下显著减小模型尺寸并提升推理速度。具体步骤包括:1)稀疏训练给参数排优先级;2)裁剪不重要通道;3)微调恢复精度;4)验证效果。实战部分详细展示了从环境搭建到剪枝实现的完整流程,并分析了剪枝后在边缘设备部署、实时检测等场景的优势。该方法可使YOLOv5s模型从14MB缩减至2-3MB,推理速度提升30%-50%,适用于资源受限设备的轻量化部署需求。

LXY_LOVE36的博客 104

@Autowired和@Resource到底有什么区别

最近在看项目代码的时候突然发现一个问题,一个项目中用到bean注入的方式还不一样。有的人喜欢用@Resource还有的人喜欢@Autowired,哎呦我去,对于有代码洁癖的我只能来一句!!!!说好的规范呢!!! @Autowired和@Resource 到底有什么区别那,带着疑问开启了抛坟模式。它们的区别到底在哪里。 先说下@Resource注解,@Resource实际上并不是spring当中提供的注解。他和spring没有半毛钱关系,虽然他也实现了spring中bean注...

weixin_42226741的博客 3140

【异常】DeepSeek API HTTP 401 认证失败错误完整排查与解决方案

摘要:本文针对DeepSeek API开发中的HTTP 401认证失败错误进行深度解析,指出该错误属于不可重试的认证类问题。文章首先拆解错误日志关键字段,区分401与其他API错误的本质差异。随后提供优先级排序的全链路解决方案:1)检查API密钥有效性;2)规范请求头认证格式;3)排查账户权限状态;4)验证请求环境配置。最后建议通过新建测试密钥、使用官方示例代码或联系技术支持进行兜底处理。全文采用技术脱敏处理,为开发者提供系统性的401错误排查指南。(149字)

奶爸的编程之路,也就一周冷个三天 1531

白话@Autowired和@Resource区别和应用场景

白话@Autowired和@Resource区别和应用场景 @Autowired @Resource 什么时候用@Resource? @Autowired @Autowired是我们平时开发中用的比较多的自动装备bean的注解。 @Autowired由Spring提供,根据类的Type(类型)进行IOC容器中的寻找并且装配,如: 会去Ioc容器中找到Type为User的对象。 @Resource @Resource默认根据类的Name(名称)进行IOC容器中的寻找并且装配,如: 也

m0_54853503的博客 2252

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

@Resource注解和@Autowired注解的区别和联系 是什么?

Autowired是 Spring 框架中定义的注解,用于实现依赖注入,其默认行为是按照类型(byType)进行匹配。如果需要实现按照名称(byName)匹配,则需要借助@Qualifier注解或@Primary注解来辅助实现更精确的注入。而@Resource是 JSR 250 规范中定义的注解,Spring 对其提供了支持。与@Autowired不同,@Resource默认是按照名称(byName)进行匹配,如果未指定name属性,Spring 会先根据属性名称查找 Bean,匹配失败后才会按照。

qq_59480672的博客 945

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

@Autowired和@Resource的区别

作者:苏三说技术 链接:https://www.zhihu.com/question/39356740/answer/1907479772 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 @Autowired和@Resouce的区别 @Autowired功能虽说非常强大,但是也有些不足之处。比如:比如它跟spring强耦合了,如果换成了JFinal等其他框架,功能就会失效。而@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。 除此之外.

liqingtx的专栏 356

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

浅谈 @Autowired 和 @Resource 的区别

写过Spring框架的同学应该都知道,Spring当中使用字段注入的时候既可以用@Autowired又可以用@Resource,但是当我使用@Autowired,idea会提示我说,不建议使用字段注入:但如果我用的是@Resource,就不会有这样的提示:于是在好奇心的驱使下,我探究了一下他们两者的区别,并了解了为什么idea会对@Autowired发出弱警告,在这里分享给大家。

m0_57042151的博客 161

@Autowired 和 @Resource的区别

如果你正在使用 Spring 框架,并且希望利用 Spring 提供的更多特性(如@Primary@Qualifier),那么@Autowired是一个更好的选择。如果你希望你的代码更加标准化,不依赖于 Spring 框架的特定实现,或者你需要通过名称来精确控制依赖注入,那么@Resource可能更适合你的需求。

Q_Boom的博客 1066

@Autowired和@Resource注解的区别

Autowired是Spring提供的按类型注入的注解,若存在多个同类型Bean需配合@Qualifier指定名称。@Resource是Java标准注解,默认按名称匹配,名称未匹配时按类型注入。前者依赖Spring框架,后者更通用且支持名称/类型双策略。

weixin_46084191的博客 840

SpringBoot | @Autowired 和 @Resource 的区别及原理分析

Autowired是Spring框架提供的注解,旨在实现自动注入依赖。它通常用于自动装配Bean时,通过Spring容器找到匹配的Bean,并将其注入到标注了@Autowired的字段、构造方法或Setter方法中。@Resource是Java的标准注解(JSR-250规范),在Spring中也得到了支持。它的作用是实现依赖注入,主要通过名称来进行自动装配,如果找不到与名称匹配的Bean,则通过类型来进行匹配。

Andya_net的博客 1385
上一篇: 一、Java 基础面试题
下一篇: PR安装出现错误代码:195
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值