Spring 中的 @Autowired 和 @Resource

🧩 一、@Autowired 和 @Resource 的基本作用

注解来源作用
@AutowiredSpring 提供(org.springframework.beans.factory.annotation.Autowired按类型 自动注入
@ResourceJDK 提供(javax.annotation.Resource默认按名称 注入,找不到再按类型

🚦 二、核心区别详解

对比项@Autowired@Resource
注解来源Spring 框架JDK(JSR-250 规范)
默认注入方式类型注入(byType名称注入(byName
是否可选可以配合 @Autowired(required = false) 设置为可选默认必须有该 Bean
是否支持构造器✅ 支持构造器注入❌ 不支持构造器注入
是否支持 @Qualifier✅ 支持,用于指定具体 Bean 名称❌ 不支持 @Qualifier(直接用 name)
Spring 推荐✅ 是可以用但不推荐(除非兼容旧项目)

🔍 三、举例对比

✅ 1. 使用 @Autowired + @Qualifier(推荐方式)

@Component
public class MyService {@Autowired@Qualifier("userDaoImpl1")private UserDao userDao;
}

Spring 会按类型找,然后用 @Qualifier 精确到 Bean 名称。

✅ 2. 使用 @Resource

@Component
public class MyService {@Resource(name = "userDaoImpl1")private UserDao userDao;
}

Spring 会直接按照 name = "userDaoImpl1" 去找 Bean。

✅ 3. 构造器注入(只能用 @Autowired

@Component
public class MyService {private final UserDao userDao;@Autowiredpublic MyService(UserDao userDao) {this.userDao = userDao;}
}

💣 四、常见坑点

1. 多个实现类时,不指定名称会报错

public interface UserDao {}
@Component("userDaoImpl1") class UserDaoImpl1 implements UserDao {}
@Component("userDaoImpl2") class UserDaoImpl2 implements UserDao {}

注入时:

@Autowired // ❌ 报错:有两个实现不知道选哪个
private UserDao userDao;

✅ 用 @Qualifier@Primary 来指定

2. @Resource 默认按名称,字段名要一致!

@Resource
private UserDao userDaoImpl1; // ✅ 会去找名字叫 "userDaoImpl1" 的 Bean

🧠 五、一句话总结

@Autowired 是 Spring 原生推荐,默认按类型注入,配合 @Qualifier 使用最灵活;
@Resource 是 JDK 标准注解,默认按名称,适合兼容旧系统,但不如 @Autowired 强大。

实际开发建议:

  • Spring Boot 项目中:优先使用 @Autowired + 构造器注入
  • 多实现类时:使用 @Qualifier@Primary 明确指定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

anomalib—2—输入图像大小调整

三个地方 第一:在定义model时,要在pre_processor里面去定义一个前处理,前处理就一个功能,定义图像的大小 pre_processor0 Patchcore.configure_pre_processor( image_size (128, 128)) model Patchcore( backbone"wide_r…

JSX、支持HTML标签、Ref的使用、虚拟DOM的使用

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

JVM 学习计划表(2025 版)

JVM 学习计划表(2025 版) 📚 基础阶段(2 周) 1. JVM 核心概念 ​JVM 作用与体系结构 理解 JVM 在 Java 跨平台运行中的核心作用,掌握类加载子系统、运行时数据区、执行引擎的交互流程​内存结构与数据存…

进程内存分布--之理论知识

一个由C/C编译的程序占用的内存分为以下几个部分 : 1、栈区(stack):由编译器自动分配释放 ,存放函数调用函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap&#xf…

WEB安全--内网渗透--LMNTLM基础

一、前言 LM Hash和NTLM Hash是Windows系统中的两种加密算法,不过LM Hash加密算法存在缺陷,在Windows Vista 和 Windows Server 2008开始,默认情况下只存储NTLM Hash,LM Hash将不再存在。所以我们会着重分析NTLM Hash。 在我们内…

时尚优雅奢华品牌包装徽标设计衬线英文字体安装包 Kagea – Luxury Women Ligature Font

Kagea 是一种复杂的衬线字体,有常规和压缩两种样式,具有 50 连字和替代字体,并支持多种语言。其精致的比例和别致的字体使其成为高端品牌、编辑布局、高档包装、时尚品牌和奢侈品设计的理想选择。 包含内容: TTF、OTF 和 WOFF 格…

cut命令用法

cut 是 Linux/Unix 系统中一个用于按列提取文本内容的命令,常用于处理结构化文本(如 CSV、日志、配置文件等)。它通过分隔符、字符位置或字节位置来切割文本,提取指定部分。 核心功能 按字段(列)提取&#…

美国mlb与韩国mlb的关系·棒球9号位

MLB(Major League Baseball,美国职业棒球大联盟)作为全球最高水平的职业棒球联赛,与韩国市场流行的“MLB”时尚品牌之间存在着授权合作关系,但两者在业务范畴和品牌定位上存在显著差异。 一、品牌授权背景:…

从吉卜力漫画到艺术创造:GPT-4o多种风格绘图Prompt大全

在3月底,GPT-4o掀起了一阵吉卜力绘图浪潮,大家纷纷输入一张图片,让4o模型进行风格化迁移,其中吉卜力风格的漫画在社交媒体上最为火热。在大家争议4o的训练数据是否侵权和4o背后的技术原理的时候,我们先来玩一玩&#x…

Leetcode 3510. Minimum Pair Removal to Sort Array II

Leetcode 3510. Minimum Pair Removal to Sort Array II 1. 解题思路2. 代码实现 题目链接:3510. Minimum Pair Removal to Sort Array II 1. 解题思路 这一题和题目3507. Minimum Pair Removal to Sort Array I本质上是同一道题目,唯一的区别在于时间…

【数学建模】(时间序列模型)ARIMA时间序列模型

ARIMA时间序列模型详解及常见时间序列模型概览 文章目录 ARIMA时间序列模型详解及常见时间序列模型概览1 引言2 ARIMA模型的基本概念3 ARIMA模型的组成部分详解3.1 AR模型 (自回归模型)3.2 MA模型 (移动平均模型)3 I (差分) 4 ARIMA模型的建模步骤5 Python实现ARIMA模型6 常见时…

嵌入式AI开发者职业成长路线图

嵌入式AI开发者职业成长路线图 一、核心技术能力构建 1. 深度学习框架 TensorFlow/TensorFlow Lite:适合部署到嵌入式设备PyTorch:研究和原型开发ONNX:模型转换与部署 2. 模型理解与应用 卷积神经网络(CNN):图像识别、目标检…

单元测试之mockito

简介 mockito是一款模拟测试框架,用于Java开发中的单元测试。通过mockito,可以创建和配置一个对象,通过它来替换对象的外部依赖。 作用:模拟一个类的外部依赖,保证单元测试的独立性。例如,在类A中会调用类…

Oracle数据库数据编程SQL<5 正则表达式函数*****>

Oracle 提供了一组强大的正则表达式函数,用于在 SQL 和 PL/SQL 中进行复杂的模式匹配和文本处理。这些函数基于 POSIX 标准正则表达式,功能强大且灵活。 目录 一、Oracle 正则表达式函数概览 二、函数详解及示例 1. REGEXP_LIKE 2. REGEXP_INSTR 3. REGEXP_SUBSTR 4. …

el-tabs添加按钮增加点击禁止样式

前置文章 一、vue使用element-ui自定义样式思路分享【实操】 二、vue3&ts&el-tabs多个tab表单校验 现状确认 点击添加按钮,没有点击样式,用户感知不明显没有限制最大的tab添加数量,可以无限添加 调整目标&代码编写 调整目标…

DB-Mysql中TIMESTAMP与DATETIME的区别

文章目录 ‌存储范围‌‌时区处理‌存储空间‌默认值和自动更新‌‌零值处理‌适用场景‌总结 在MySQL中,TIMESTAMP和DATETIME是两种常用的日期时间数据类型,它们虽然都用于存储日期和时间,但在多个方面存在显著差异。以下是它们的主要区别&a…

Spring 中有哪些设计模式?

🧠 一、Spring 中常见的设计模式 设计模式类型Spring 中的应用场景单例模式创建型默认 Bean 是单例的工厂模式创建型BeanFactory、FactoryBean抽象工厂模式创建型ApplicationContext 提供多个工厂接口代理模式结构型AOP 动态代理(JDK/CGLIB)…

C# Winform 入门(3)之尺寸同比例缩放

放大前 放大后 1.定义当前窗体的宽度和高度 private float x;//定义当前窗体的宽度private float y;//定义当前窗台的高度 2.接收当前窗体的尺寸大小 x this.Width;//存储原始宽度ythis.Height;//存储原始高度setTag(this);//为控件设置 Tag 属性 3.声明方法,获…

从零开始的编程-java篇1.6.3

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

【Redis】数据的淘汰策略

目录 淘汰策略方案(8种) LRU和LFU策略的区别 使用建议 手搓LRU算法 方式一 方式二 大家好,我是jstart千语。今天和大家回来聊一下redis,这次要讲的是它的淘汰策略。为什么需要淘汰策略呢,就是当redis里面的内存占…