【Spring中@Autowired和@Resource注解的区别?】

2023-11-12

一.背景

Spring中@Autowired和@Resource注解的区别?

Spring框架想必大家都知道吧,那么Spring中@Autowired和@Resource注解的区别你知道吗?如果不知道也不要紧,我们就一起来学习一起吧。

在这里插入图片描述

二.@Autowired和@Resource注解的区别?

@Resource和@Autowired都是做bean的注入时使用,但是@Resource并不是Spring的注解,它的包是javax.annotation.Resource。

2.1 共同点

两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

2.2 不同点

2.3.1 @Autowired注解

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。

// 使用其中一种即可
public class MallServiceImpl {
	 // 注入到属性上
	 @Autowired
	 private MallDao mallDao;
	 
	 // 注入到属性的方法上
	 @Autowired
	 public void setUserDao(MallDao mallDao) {
	 	this.mallDao= mallDao;
	 }
}

如果我们想使用按照名称(byName)来装配,可以结合@Qualififier注解一起使用。如下:

public class MallServiceImpl {
	@Autowired
	@Qualifier("mallDao")
	private MallDao mallDao; 
}
2.3.2 @Resource注解

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略.

// 使用其中一种即可
public class MallServiceImpl {
	 // 注入到属性上
	 @Resource(name="mallDao")
	 private MallDao mallDao;
	 
	 // 注入到属性的方法上
	 @Resource(name="mallDao")
	 public void setUserDao(MallDao mallDao) {
	 	this.mallDao= mallDao;
	 }
}

@Resource装配顺序:

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

三.总结

上面的内容对于刚接触Spring框架的同学可能稍微有些难受,但是对于之前有过技术积累的同学来说就是小菜一碟了,我觉得也不要紧,谁都是从一个小白走过来的,踏踏实实的,只是时间问题!加油!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Spring中@Autowired和@Resource注解的区别?】 的相关文章

  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何在 Spring-JUnit 测试中设置 JNDI 查找?

    我正在使用 Maven 3 0 3 Spring 3 1 0 RELEASE 和 JUnit 4 8 1 如何在容器外部创建 JNDI 功能 在我的例子中是 JBoss 我认为 Spring 的 jndiTemplate 可以解决这个问题
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 创建一个 JSON 对象以在 Spring Boot 测试中发布

    我想编写基本测试来使用 JSON 负载在 users URL 上执行 POST 请求来创建用户 我找不到如何将新对象转换为 JSON 到目前为止有这么多 这显然是错误的 但解释了目的 Test public void createUser
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其

随机推荐

  • Python中的条件循环

    1 if条件 1 1 语法规则 if的语法 if confident 条件判断为布尔型 doing thing true时完成的动作 else doing thing false时完成的动作 1 2 示例 if else 图 1 if示例
  • QT程序发布

    用Release版本运行 将生成的exe文件拷贝到一个空文件夹中 找到QT的cmd窗口 在cmd窗口中 用 cd 命令 进入第一步中建立的空文件夹中 运行命令windeployqt exe文件 将程序需要的库文件都导入该文件中 将整个文件夹
  • Python毕业设计基于django的企业人力资源管理系统

    文末获取资源 收藏关注不迷路 文章目录 一 项目介绍 二 主要使用技术 三 研究内容 四 核心代码 五 文章目录 一 项目介绍 在互联网信息技术时代中 企业管理更多的是使用管理系统进行智能化控制 提高单位的核心竞争力 适应快节奏的生产活动
  • 二分查找 binarySearch

    二分查找 binarySearch 基本概念 时间复杂度和空间复杂度 如何取mid Level 1 一般实现 迭代法 递归法 Level 2 First or Last Position of Target Last Position of
  • ue4 VR测量

    1 在tick函数里面构建测量需要的射线 2 在控制器书写测量函数
  • 数据结构和算法的基本概念, 算法复杂度,时间,空间复杂度

    目录 概念 大O时间复杂度表示法 看几个例子 加法规则 乘法规则 例子 算法时间复杂度计算规则 常见算法时间复杂度 O 1 O 1
  • Spring注解@ComponentScan自定义扫描类

    注 ComponentScan是用在配置类上的 配置类用 Configuration标记 Filter定义扫描规则 FilterType ANNOTATION 按照注解 FilterType ASSIGNABLE TYPE 按照给定的类型
  • 串的模式匹配算法(超详细)

    串的模式匹配 1 简单的模式匹配算法 2 KMP算法 3 KMP算法改进 4 时间复杂度比较 1 简单的模式匹配算法 思想 将主串中所有长度为m的子串依次与模式串对比 直到找到一个完全匹配的子串或所有子串都不匹配为止 具体代码展示 1 串的
  • 电机磁链和反电动势系数辨识

    电机磁链和反电势系数关系 电机磁链和反电动势系数辨识 电机dq坐标系下电压方程 u d
  • mysql数据库备份还原及表空间和用户创建

    mysql数据库备份还原 1 本地机器copy文件到一台机器 scp path 路径 file 文件 10 10 10 10 对方机器ip paht 路径 file 文件 如果对方机器ssh的端口不是默认 需要添加端口 scp Pport
  • AD15如何在PCB界面锁定选中元件

    1 进入PCB界面 右下角 PCB PCB Inspector 2 选中你想要锁定的元件 inspector 出现属性 3 将Locked勾选 此时的元件固定在PCB上 无法进行拖动和属性修改
  • 在MATLAB中生成矩阵的三种方法

    在MATLAB中生成矩阵的三种方法 1 直接输入法 2 外部文件读入法 3 特殊矩阵函数生成法 1 直接输入法 1 矩阵所有元素必须在 内 2 矩阵中同行元素以逗号 或空格分隔 3 矩阵中行与行之间用分号 或回车分隔 4 矩阵元素可以是表达
  • SpringBoot如何快速简化部署

    针对于一些不清楚创建Maven项目和创建SpringBoot项目到底什么区别 本文通过创建Maven项目来构建SpringBoot项目 来方便理解两个创建方式的关系 目录 1 创建Maven工程 打jar包 2 导入spring boot相
  • Web自动化测试,页面多样化操作?

    目录 1 页面截图操作 1 1截取当前页面 1 2 1driver save screenshot filename full path 1 2 2driver get screenshot as file 完整的路径 文件名 1 2 3d
  • css 绘制直角梯形 和 平行四边形

    div div div div
  • mysql在order by中使用判断排序

    select u uName u userId u level u regTime from t user u where u status 1 and u level 1 or u level 2 order by case when u
  • 宝塔在线登录不成功的解决办法

    像上述的错误一样 宝塔外网地址打不开的情况 解决方法如下 首先登录腾讯云 找到宝塔 然后点击登录输入命令 su root 切换用户 密码如果忘记的话点击重置密码 然后在执行上述指令 输入密码就可以 进入宝塔了 输入bt命令 获得你的宝塔列表
  • Vue高德地图自定义信息窗内绑定点击事件

    因为信息窗肯定是在生成标记后点击触发的事件 所以在 methods 中直接定义点击生成标记事件 不过多赘述 本文主要解决点击标记弹出的信息窗内的点击事件绑定问题 这是高德官方文档中 自定义窗口数据的添加方式 看起来太麻烦且不好对代码进行操作
  • centos安装rocketmq

    1 下载 https github com apache rocketmq releases 2 环境 jdk1 8 0 211 maven3 6 3 3 安装 gt tar xf rocketmq all 4 7 1 tar gz gt
  • 【Spring中@Autowired和@Resource注解的区别?】

    一 背景 Spring中 Autowired和 Resource注解的区别 Spring框架想必大家都知道吧 那么Spring中 Autowired和 Resource注解的区别你知道吗 如果不知道也不要紧 我们就一起来学习一起吧 二 Au