@Autowired和@Resource

news/2024/4/15 14:31:05

文章目录

  • 简介
  • @Autowired注解
    • 什么是@Autowired注解
    • @Autowired注解的使用方式
    • @Autowired注解的优势和不足
  • @Qualifier
    • 总结:
  • @Resource注解
    • 什么是@Resource注解
    • @Resource注解的使用方式
    • @Resource注解的优势和不足
  • @Autowired vs @Resource
    • @Autowired和@Resource的区别
    • 为什么推荐使用@Resource
    • 选择适合场景的注解
  • 总结

简介

@Autowired和@Resource是Java Spring框架中用于依赖注入的注解。本文将介绍它们的定义、使用方式以及区别,帮助读者正确使用这两个注解。

@Autowired注解

什么是@Autowired注解

@Autowired是一个Spring特有的注解,用于自动装配Bean。它可以标记在字段、构造方法、Setter方法或者普通方法上,告诉Spring容器需要自动注入相关的依赖。
在这里插入图片描述

@Autowired注解的使用方式

使用@Autowired注解的方式有以下几种:

  1. 字段注入:
@Autowired
private UserService userService;
  1. 构造方法注入:
@Autowired
public UserController(UserService userService) {this.userService = userService;
}
  1. Setter方法注入:
private UserService userService;@Autowired
public void setUserService(UserService userService) {this.userService = userService;
}
  1. 方法注入:
@Autowired
public void init(UserService userService) {this.userService = userService;
}

@Autowired注解的优势和不足

优势:

  • 自动生成Bean的实例,简化了代码的编写。
  • 提高了代码的可读性和可维护性。

不足:

  • 如果有多个符合条件的Bean存在,会产生歧义,需要进一步指定匹配规则。

@Qualifier

@Qualifier注解是Spring框架提供的用于解决依赖注入歧义性的注解。当存在多个符合条件的Bean时,可以结合@Autowired或@Resource注解使用@Qualifier注解来明确指定要注入的Bean的名称或限定符。

通过在@Autowired或@Resource注解上使用@Qualifier注解,可以指定要注入的特定Bean的名称或限定符。这样能够解决当有多个相同类型的Bean存在时,容器无法确定要注入哪个Bean的问题。

以下是使用@Qualifier注解的示例:

@Component
public class MyService {@Autowired@Qualifier("myBean")private MyBean myBean;// ...
}

在这个例子中,当有多个类型为MyBean的Bean存在时,通过@Qualifier(“myBean”)注解指定要注入名为"myBean"的Bean。

需要注意的是,@Qualifier注解的值对应于具体Bean的名称或限定符。如果没有定义Bean的名称或限定符,则可以使用默认的限定符,默认情况下与Bean的类名(首字母小写)相同。

总结:

@Qualifier注解是Spring框架提供的用于解决依赖注入歧义性的注解。通过结合@Autowired或@Resource注解使用@Qualifier注解,可以明确指定要注入的特定Bean的名称或限定符。这样能够解决当有多个相同类型的Bean存在时,容器无法确定要注入哪个Bean的问题。

@Resource注解

什么是@Resource注解

@Resource是Java标准的注解,也可以用于依赖注入。它可以标记在字段、构造方法、Setter方法或者普通方法上,告诉容器需要自动注入相关的依赖。
在这里插入图片描述

@Resource注解的使用方式

@Resource注解可以通过name属性指定要注入的Bean名称,如果没有指定name属性,则会根据字段名或方法名进行自动装配。
(先Name后type)

@Resource
private UserService userService;

@Resource注解的优势和不足

优势:

  • 可以指定要注入的Bean名称,避免了歧义。
  • 支持注入基本类型的值。

不足:

  • 没有提供required属性,无法对注入结果进行非空验证。

@Autowired vs @Resource

@Autowired和@Resource的区别

  1. 来源:@Autowired是Spring特有的注解,而@Resource是Java标准的注解。
  2. 自动装配规则:@Autowired默认按类型进行自动装配,@Resource默认按名称进行自动装配。
  3. 使用范围:@Autowired可以用于构造方法、字段、Setter方法等,而@Resource只能用于字段和Setter方法。
  4. 注入机制:@Autowired不能注入基本类型的值,而@Resource可以。

为什么推荐使用@Resource

为什么更推荐使用 @Resource ?
Resource注解在字段上,这个注解是属于J2EE的,减少了与spring的耦合。
但是其实啊,这个问题,我觉得很多人可能对它的理解有误!
更推荐使用 @Resource ,我觉得不是因为@Resource注解性能更好之类的。
而是因为其可以指定是通过 name 还是 type 的注入方式,而@Autowired注解本身自己是不能实现这个效果的,要和@Qualifier一起用才可以!

选择适合场景的注解

  • 如果只使用Spring框架,建议使用@Autowired注解。
  • 如果需要保持代码的独立性,或者可能迁移到其他容器中,建议使用@Resource注解。

总结

@Autowired 根据类型type注入,

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

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

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

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

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


http://www.ppmy.cn/news/1100398.html

相关文章

Spring_Bean的自动装配

目录 三种配置机制 测试搭建 byName byType 使用注解 Autowire Qualifer Resource Autowire和Resource的不同 自动装配是使用spring满足bean依赖的一种条件 三种配置机制 在xml中显式配置;在java中显式配置;隐式的bean发现机制和自动装配。 …

Linux下systemd深入指南:如何优化Java服务管理与开机自启配置

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

9.3.4(数据链路层)

一. 以太网帧格式: 二.IP地址和Mac地址在网络传输中的区别: 1.源IP:数据发送方的地址. 目的IP:数据接收发的地址. 2.源Mac:相邻两个路由器传输数据时发送方的地址. 目的Mac: 相邻两个路由器传输数据时接收方的地址. 3. 在一次数据传输中,源IP和目的IP不变,源Mac和目的Mac不…

从数据页的角度看 B+Tree

InnoDB 是如何存储数据的? MySQL支持多种存储引擎,不同的存储引擎,存储数据的方式也不相同,我们最常使用的是 InnoDB 存储引擎。 在数据库中的记录是按照行来存储的,但是数据库的读取并不是按照 [ 行] 为单位&#x…

机器学习实战-系列教程3:手撕线性回归2之单特征线性回归(项目实战、原理解读、源码解读)

🌈🌈🌈机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 手撕线性回归1之线性回归类的实现 手撕线性回归2之单特征线性回归 手撕线性回归3之多特征线性回归 手撕线性回归4之非线性回归# 5…

Java为什么有流,流的设计原则是什么?

目录 流的设计原则 为什么是一次性的? 流的设计原则 流的设计原则主要包括以下几个方面: 简单性和一致性:流的接口应该尽可能简单和一致,以使其易于使用和理解。流的操作应该在不同类型的流之间具有一致的行为,使程序…

【PowerQuery】Excel的PowerQuery按需刷新

将数据通过PowerQuery 导入进来后,这里将进行数据分组运算,最终的数据计算结果将保存在Excel 表格中,图为销售统计结果。 在Excel中,如果我们希望进行销售统计的手动更新可以使用几种不同的方法来进行刷新: 刷新单一数据连接如果仅仅需要刷新单一数据连接的话我们可以通过…

debian11 安装 postgress 数据库 -- chatGPT

问:debian 安装 postgress 数据库 gpt: 要在Debian上安装PostgreSQL数据库,您可以按照以下步骤进行操作: 1. 打开终端:您可以通过点击"应用程序"菜单,然后在"系统工具"或"终端"下找到…

java 集成免费虹软人脸识别 SDK,实现人脸识别认证功能

系列文章目录 引入本地 jar 包教程: https://blog.csdn.net/demo_yo/article/details/132495029 文章目录 系列文章目录前言一、SDK 下载二、SDK 集成1、jar 依赖包2、dll 链接文件 三、API 集成1、yaml 配置2、Properties 配置类3、Factory 工厂类4、Service 服务…

深度学习基础之梯度下降

1. 引言 梯度下降是一种用于最小化(或最大化)损失函数的优化算法。它是机器学习和深度学习中的一个关键概念,通常用于调整学习算法中的参数。 梯度下降背后的核心思想是迭代调整参数以最小化损失函数。它的工作原理是计算损失函数相对于每个…

手写签名到背景上合为1张图

手写签名到背景上合为1张图 package.json中 "signature_pad": "3.0.0-beta.3"<template><div class"home"><canvas id"canvas" width"500" height"300"></canvas><button click"…

postgre 12.11单实例安装文档

一 下载 访问https://www.postgresql.org/download/&#xff0c;点击左侧的‘source进行下载&#xff0c;一般选择bz2的安装包。 二 安装 这里安装12.11版本的postgre&#xff0c;数据目录路径为/data/server/pgdata&#xff0c;端口为5432. 2.1 安装依赖包 #安装 yum in…

谷歌浏览器书签位置及怎么导入书签

谷歌浏览器书签位置&#xff1f; 在谷歌浏览器地址栏输入chrome://version/ 按回车键打开谷歌浏览器安装信息在显示的个人资料路径查找到Bookmarks文件&#xff0c;及为谷歌浏览器书签文件 谷歌浏览器怎么导入书签&#xff1f; 将Bookmarks加入.html后缀在书签管理器中找到右…

Redis——Java中的客户端和API

Java客户端 在大多数的业务实现中&#xff0c;我们还是使用编码去操作Redis&#xff0c;对于命令的学习只是知道这些数据库可以做什么操作&#xff0c;以及在后面学习到了Java的API之后知道什么方法对应什么命令即可。 官方推荐的Java的客户端网页链接如下&#xff1a; 爪哇…

AST还原实战|第二届猿人学js逆向比赛第三题混淆还原详解

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 1. 目标地址 https://match2023.yuanrenxue.cn/topic/3 其加密参数tok…

【蓝凌表单】如何限制明细表字段1与字段2一致时不允许提交

无需开发&#xff0c;表单内置功能快速解决&#xff1b; 有些搞笑&#xff0c;维护蓝凌系统好几年&#xff0c;对系统好多功能也不是很熟悉&#xff0c; 当接到业务需求&#xff0c;不允许某信息跟某信息一致的需求时&#xff0c;第一时间是想到用JS脚本去实现&#xff0c;忽略…

窗口延时、侧输出流数据处理

一 、 AllowedLateness API 延时关闭窗口 AllowedLateness 方法需要基于 WindowedStream 调用。AllowedLateness 需要设置一个延时时间&#xff0c;注意这个时间决定了窗口真正关闭的时间&#xff0c;而且是加上WaterMark的时间&#xff0c;例如 WaterMark的延时时间为2s&…

项目经验分享|openGauss 刘昱娴:对未知葆有好奇与坚持

开源之夏 项目经验分享 2023 #02 # 项目基本信息 项目名称&#xff1a;分页器组件封装 项目导师&#xff1a;王杏 项目简述与产出要求&#xff1a;分页器组件封装 1. 完成分页器组件封装&#xff1b;支持移动端和pc端 2. 适配Chrome、Safari、Firefox、Edge 等主流浏览器…

SpringBoot配置文件加载顺序

Spring Boot 启动时&#xff0c;会自动加载 JAR 包内部及 JAR 包所在目录指定位置的配置文件&#xff08;Properties 文件、YAML 文件&#xff09;&#xff0c;下图中展示了 Spring Boot 自动加载的配置文件的位置及其加载顺序&#xff0c;同一位置下&#xff0c;Properties 文…

LeetCode(力扣)47.全排列 IIPython

LeetCode47.全排列 II 题目链接代码 题目链接 https://leetcode.cn/problems/permutations-ii/ 代码 class Solution:def permuteUnique(self, nums):nums.sort() # 排序result []self.backtracking(nums, [], [False] * len(nums), result)return resultdef backtrackin…
最新文章