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

@Autowired和@Resource注解的区别和联系

直接看原文

原文链接:

【精选】@Autowired和@Resource注解的区别和联系【精选】

-------------------------------------------------------------------------------------------------------------------------------

先说联系

联系

  1. @Autowired和@Resource注解都是作为bean对象注入的时候使用的
  2. 两者都可以声明在字段和setter方法上

注意:如果声明在字段上,那么就不需要再写setter方法。但是本质上,该对象还是作为set方法的实参,通过执行set方法注入,只是省略了setter方法罢了

区别

  1. @Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的
  2. @Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入
  3. @Autowired注解注入的对象需要在IOC容器中存在,否则需要加上属性required=false,表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错

对于byName和byType方式不太熟悉的可以看一下这里:Spring中的byName与byType

简单来说,byName就是变量名去匹配bean的id属性,而byType则是变量类型去匹配bean的class属性

<bean id="userService" class="com.test.UserServiceImpl">
</bean> 
@Autowired
private UserService userService;

此处byName就是拿变量名userService去匹配IOC容器的iduserService,匹配成功;而byType就是拿变量类型UserService去匹配IOC容器的idcom.test.UserService.UserServiceImpl,因为UserServiceImpl是UserService实现,所以也匹配成功

接下来再分别讲讲@Autowired注解和@Resource注解的使用

@Autowird注解的使用

步骤:@Autowird默认的注入方式为byType,也就是根据类型匹配,当有多个实现时,则通过byName注入,也可以通过配合@Qualifier注解来显式指定name值,指明要使用哪个具体的实现类

举例:

首先有一个接口UserService和两个实现类UserServiceImpl1和UserServiceImpl2,并且这两个实现类已经加入到Spring的IOC容器中了

@Service
public class UserServiceImpl1 implements UserService@Service
public class UserServiceImpl2 implements UserService

在spring容器中的配置体现就是下面的, 下面的id默认就是类名首字母的小写,class就是全类名.

<bean id="userServiceImpl1 " class="com.test.UserServiceImpl1">
</bean> 
<bean id="userServiceImpl2 " class="com.test.UserServiceImpl2">
</bean> 

通过@Autowired注入使用

@Autowired
private UserService userService;

根据上面的步骤,可以很容易判断出,直接这么使用是会报错的
原因:首先通过byType注入(就是拿UserService去容器里找有么有UserService或者实现类是UserService的),判断UserService类型有两个实现,无法确定具体是哪一个,于是通过byName方式(就是拿变量名去和容器里id比较),这里的变量名userService也无法匹配IOC容器中id(此处指的userServiceImpl1和userServiceImpl2),于是报错。

注意:通过注解注入到IOC容器的id值默认是其类名首字母小写

解决方案

方式一:

// 方式一:改变变量名
@Autowired
private UserService userServiceImpl1;

方式二:

// 方式二:配合@Qualifier注解来显式指定name值
@Autowired
@Qualifier(value = "userServiceImpl1")
private UserService userService;

@Resource注解的使用

步骤:@Resource默认通过byName注入,如果没有匹配则通过byType注入

举例:

@Service
public class UserServiceImpl1 implements UserService@Service
public class UserServiceImpl2 implements UserService
@Resource
private UserService userService;

首先通过byName匹配,变量名userService无法匹配IOC容器中任何一个id(这里指的userServiceImpl1和userServiceImpl2),于是通过byType匹配,发现类型UserService的实现类有两个,仍然无法确定,于是报错。

同时@Resource还有两个重要的属性:name和type,用来显式指定byName和byType方式注入

使用:对应4种情况

// 1. 默认方式:byName
@Resource  
private UserService userDao; // 2. 指定byName
@Resource(name="userService")  
private UserService userService; // 3. 指定byType
@Resource(type=UserService.class)  
private UserService userService; // 4. 指定byName和byType
@Resource(name="userService",type=UserService.class)  
private UserService userService; 
  1. 既没指定name属性,也没指定type属性:默认通过byName方式注入,如果byName匹配失败,则使用byType方式注入(也就是上面的那个例子)
  2. 指定name属性:通过byName方式注入,把变量名和IOC容器中的id去匹配,匹配失败则报错
  3. 指定type属性:通过byType方式注入,在IOC容器中匹配对应的类型,如果匹配不到或者匹配到多个则报错
  4. 同时指定name属性和type属性:在IOC容器中匹配,名字和类型同时匹配则成功,否则失败

相关文章:

@Autowired和@Resource注解的区别和联系

直接看原文 原文链接: 【精选】Autowired和Resource注解的区别和联系【精选】 ------------------------------------------------------------------------------------------------------------------------------- 先说联系 联系 Autowired和Resource注解都是作为bean…...

设计模式类型

创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象&#xff0c;能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不清楚其具体的实现细节&#xff0c;使整个系…...

Android修行手册-实现利用POI将图片插入到Excel中(文末送书)

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…...

低功耗工业RFID设备应用

随着工业自动化的迅速发展&#xff0c;RFID技术也在工业领域得到了广泛的应用&#xff0c;在近距离非接触读写应用时&#xff0c;常常利用低功耗的工业RFID设备来进行识别&#xff0c;下面我们将详细介绍低功耗工业RFID设备的应用。 低功耗工业RFID设备具有功耗低、体积小、重量…...

# Oracle 库常见问题排查

Oracle 库常见问题排查 文章目录 Oracle 库常见问题排查查询数据库的相关信息查看正在执行的语句杀掉正在执行的sql查看未提交的事务查看锁表 查询数据库的相关信息 查看正在执行的语句 SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, s.sql_child_number, sq.sq…...

矩阵乘积的迹对矩阵求导

说明 有时候为了输入方便&#xff0c;B和都代表B的转置。 矩阵的在线计算有个网站可以参考&#xff1a;Matrix Calculus dtr(AB)/dAB 下面用一个例子来证明。 dtr(ABA)/dAABAB 下面用一个例子来证明&#xff1a; 因为我们要求ABA的迹&#xff0c;所以为了简便&#xff0c;我们…...

IP 地址冲突检测工具

IP 冲突是一个术语&#xff0c;用于表示同一网络或子网中尝试使用相同 IP 地址的两个或多个设备的状态&#xff0c;这可能会导致发往特定主机的通信与其他主机混淆&#xff0c;因为两者都使用相同的 IP&#xff0c;为了避免这种情况&#xff0c;某些主机在发生 IP 冲突时会失去…...

js树形数组遍历练习,扁平化、格式化、获取节点父级

1.树形数组扁平化 数组扁平化的方式很多&#xff0c;这里主要是用递归处理&#xff0c;除此之外还有正则、扩展运算符等等 const list [{name:1,id:1,children:[{name:11,id:11,children:[{name:111,id:111}]},{name:12},]},{name:2,id:2,children:[{name:21,id:21,children:…...

c语言贪吃蛇项目的实现

ncurse的引入 ncurse的概念 ncurse(new curses)是一套编程库&#xff0c;它提供了一系列的函数&#xff0c;以便使用者调用它们去生成基于文本的用户界面。 ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。ncurses用得最多的地方是…...

IDEA运行前端vue项目,安装nodejs,以及配置

我在刚接手到一个项目的时候&#xff0c;不知道前端的代码的情况下&#xff0c;想要写后端代码&#xff0c;遇到问题 所以需要看前台代码&#xff0c;着手IDEA 开始 安装nodejs (为什么要安装nodejs呢&#xff0c;首先就是说需要npm, 而nodejs 内置npm) 1.从官网下载 nodej…...

SAP S4后的一些注意点(一)(更新中)

SAP 此外&#xff0c;我们必须确保 P10 中所有新的 Unicore 代码都是云就绪的。因此&#xff0c;在 ATC 中增加了一项新的检查&#xff08;自定义&#xff09;&#xff0c;以证明代码的云就绪性。此外&#xff0c;我们还在 ADT 中安装了一个名为 ABAP Cleaner 的新插件&#xf…...

Python高级语法----深入asyncio:构建异步应用

文章目录 异步I/O操作示例:异步网络请求异步任务管理示例:并发执行多个任务使用异步队列示例:生产者-消费者模式在现代软件开发中,异步编程已经成为提高应用性能和响应性的关键技术之一。Python的asyncio库为编写单线程并发代码提供了强大的支持。本文将深入探讨asyncio的三…...

5-爬虫-打码平台、打码平台自动登录打码平台、selenium爬取京东商品信息、scrapy介绍安装、scrapy目录结构

1 打码平台 1.1 案例 2 打码平台自动登录打码平台 3 selenium爬取京东商品信息 4 scrapy介绍安装 5 scrapy目录结构 1 打码平台 # 1 登录某些网站&#xff0c;会有验证码---》想自动破解-数字字母&#xff1a;python模块&#xff1a;ddddocr-计算题&#xff0c;成语题&#xf…...

HTTPS 的工作原理是什么?

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是一种通过加密和认证保护数据传输安全的通信协议。它是基于传统的 HTTP 协议&#xff0c;通过使用 SSL&#xff08;Secure Sockets Layer&#xff09;或 TLS&#xff08;Transport Layer Security&#xff09…...

【STM32】TIM2的PWM:脉冲宽度调制

PWM是一种周期固定&#xff0c;脉宽可调整的输出波形。 0.通用寄存器输出 1.捕获/比较通道1的主电路--中间部分 2.捕获/比较通道的输出部分--输出 3.通用定时器输出PWM原理 PWM波周期或者频率由ARR&#xff08;就是要进递增/递减的值&#xff09;决定&#xff0c;PWM波占空比由…...

DRF 学习

一、安装DRF 1、pip install djangorestframework -i https://pypi.douban.com/simple 2、pip install pymysql -i https://pypi.douban.com/simple 二、创建Django项目 1、django-admin startproject drfdemo 三、添加rest_framework应用 1、INSTALLED_APPS …...

2023年双11有哪些便宜的云服务器值得推荐?

每年的双11期间各大云计算服务商都会推出特价云服务器&#xff0c;今年自然也不例外&#xff0c;下面给大家分享2023年双11有哪些便宜的云服务器值得推荐。 1、阿里云【传送门>>>】 阿里云双11推出了金秋云创季活动&#xff0c;2核2G3M不限流量&#xff0c;1年99元&…...

[Java/力扣160]相交链表

这道题的关键是&#xff0c;使两个链表上的指针同时到达相交点处 方法一&#xff1a;分别遍历两个链表&#xff0c;得到其长度。然后先让较长的链表上的指针走“两链表长度之差”。然后两指针分别一步一步走&#xff0c;就能同时到达相交点处。 方法二&#xff1a;让 p1 遍历…...

LLVM学习笔记(60)

4.4.3. X86Subtarget 在X86TargetMachine构造函数的105行调用了X86Subtarget构造函数来创建具体的目标机器对象。 4.4.3.1. FMV的支持&#xff08;v7.0&#xff09; V7.0将具体目标机器对象的生成推迟到第一次调用getSubtarget ()时才创建。不过&#xff0c;为了方便起见&am…...

Linux命令查看pcap包报文数量、包体包含内容、包长

查看pcap包内容 要查看pcap文件中的包数量&#xff0c;可以使用网络分析工具&#xff0c;如Wireshark或Tcpdump&#xff0c;或者使用编程语言中的网络分析库&#xff0c;如Python中的Scapy或Sniffy。 使用Wireshark的方法如下&#xff1a; 打开Wireshark软件。选择要查看的p…...

C++类的定义与实现

一、类的定义根据C Primer中的描述&#xff0c;类的定义是一种将抽象转换为用户定义类型的C工具。也就是说类的实质是一种用户自定义类型&#xff0c;它可以将数目表示和操作数据的方法组合成一个整洁的包。在实际开发当中&#xff0c;想要实现一个类&#xff0c;并编写一个使用…...

丢包率不高但吞吐就是上不去?一文讲透 TCP 零窗口(Zero Window)的识别、边界与排查方法

丢包率不高但吞吐就是上不去&#xff1f;一文讲透 TCP 零窗口&#xff08;Zero Window&#xff09;的识别、边界与排查方法 Topic&#xff1a;TCP 零窗口与接收端瓶颈排查 很多网络性能问题看起来像“链路抖动”或“出口带宽不足”&#xff0c;但真正的根因并不在网络中间&…...

cnpy库:C++读取 npy/npz 文件

1. 动机 NumPy提供了接口函数可以把数据存入.npy文件&#xff0c;也可把多个数组存入.npzy文件。 cnpy库提供了在C中读写这些格式的接口函数 其动机来自于科学编程&#xff0c;其中大量数据是用 C 生成并用 Python 分析的。 写入 .npy 的优点是使用低级 C I/O&#xff08;f…...

如何5分钟完成智能OpenCore配置:新手也能轻松构建黑苹果引导

如何5分钟完成智能OpenCore配置&#xff1a;新手也能轻松构建黑苹果引导 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置而头…...

3步解决Windows和Office激活难题:KMS_VL_ALL_AIO智能脚本完全指南

3步解决Windows和Office激活难题&#xff1a;KMS_VL_ALL_AIO智能脚本完全指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活而烦恼吗&#xff1f;每次重装系统后都要面对…...

每日安全情报报告 · 2026-04-28

每日安全情报报告 2026-04-28 报告时间&#xff1a;2026-04-28 09:03 CST 覆盖周期&#xff1a;近 48 小时&#xff08;2026-04-26 ~ 2026-04-28&#xff09; 风险评级说明&#xff1a;&#x1f534; 严重(CVSS ≥ 9.0) | &#x1f7e0; 高危(CVSS 7.0–8.9) | &#x1f7e1; …...

STM32F407串口调试避坑指南:从CubeMX配置到HAL库中断收发,这些细节错了真调不通

STM32F407串口调试避坑指南&#xff1a;从CubeMX配置到HAL库中断收发实战解析 调试STM32串口通信就像在迷宫中寻找出口——看似简单的路径背后隐藏着无数可能让你停滞不前的陷阱。本文将带你穿越这片技术丛林&#xff0c;用工程师的视角剖析那些手册上不会明确标注&#xff0c;…...

资源共享实践:汽车行业如何构建高效的ANSYS仿真许可证池

汽车行业如何构建高效的ANSYS仿真许可证池我见过太多车企在仿真软件许可上翻车。绝非买少了不够用&#xff0c;就是买多了用不完。关键问题就出在咋样管好这些个“贵得离谱又用得不多”的资源上。痛点藏在哪儿去年咱们给某外资整车厂做调研时&#xff0c;得留心到那几位用的ANS…...

FanControl终极配置指南:3步实现Windows风扇精准温控

FanControl终极配置指南&#xff1a;3步实现Windows风扇精准温控 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...

Java常见报错处理技术文章大纲

一、引言 Java错误处理的重要性:解释错误对程序稳定性的影响。 错误分类概述:简要介绍编译时错误、运行时错误和逻辑错误。 文章目标:帮助开发者快速识别、诊断和解决常见问题。 二、编译时错误处理 常见类型与原因: 语法错误(如缺少分号或括号)。 类型不匹配(如赋值给错…...