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

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 明确指定

相关文章:

Spring 中的 @Autowired 和 @Resource

🧩 一、Autowired 和 Resource 的基本作用 注解来源作用AutowiredSpring 提供(org.springframework.beans.factory.annotation.Autowired)按类型 自动注入ResourceJDK 提供(javax.annotation.Resource)默认按名称 注入…...

自定义汇编语言(Custom Assembly Language) 和 Unix Git

1. 什么是自定义汇编语言(Custom Assembly Language)? 汇编语言(Assembly Language)是一种低级编程语言,它直接与 CPU 指令集(Instruction Set Architecture, ISA)对应,…...

Python菜鸟教程(小程序)

目录 一.简易计算器 二.学生成绩分级 三.密码设置 四.作业选择 点赞收藏,评论支持 一.简易计算器 print(-------使用的运算符-------\n) print(1.加号) print(2.减号) print(3.乘号) print(4.除号) Aint(input(请输入第一个数: )) Bint(input(请输入第二个数: )) Fi…...

2011-2019年各省地方财政金融监管支出数据

2011-2019年各省地方财政金融监管支出数据 1、时间:2007-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政金融监管支出 4、范围:31省 5、指标说明:地方财政在金融监管方面的支出…...

Java大厂面试题 -- JVM 优化进阶之路:从原理到实战的深度剖析(2)

最近佳作推荐: Java大厂面试题 – 深度揭秘 JVM 优化:六道面试题与行业巨头实战解析(1)(New) 开源架构与人工智能的融合:开启技术新纪元(New) 开源架构的自动化测试策略优…...

SQL LIKE 语句详解

SQL LIKE 语句详解 引言 SQL(Structured Query Language)是用于管理关系数据库的标准语言。在SQL中,LIKE 语句是一种常用的字符串匹配操作符,用于在查询中搜索包含特定模式的字符串。本文将详细介绍 LIKE 语句的用法、规则以及注意事项。 一、什么是 LIKE 语句? LIKE …...

现代Web应用中的时光机器:深入解析撤销/重做功能的艺术与科学

引言:数字世界的安全网 在现实世界中,我们拥有橡皮擦、撤销键和后悔药(比喻意义上)。数字世界同样需要这样的安全保障。研究表明: **85%**的用户会在完成复杂表单时犯至少一个错误 提供撤销功能的界面可将用户满意度…...

存储引擎 / 事务 / 索引

1. 存储引擎 MySQL 中特有的术语。 (Oracle 有,但不叫这个名字) 是一种表存储 / 组织数据的方式 不同的存储引擎,表存储数据的方式不同 1.1 查看存储引擎 命令: show engines \g(或大写:G…...

Go语言-初学者日记(八):构建、部署与 Docker 化

🧱 一、go build:最基础的构建方式 Go 的构建工具链是出了名的轻量、简洁,直接用 go build 就能把项目编译成二进制文件。 ✅ 构建当前项目 go build -o myapp-o myapp 指定输出文件名默认会构建当前目录下的 main.go 或 package main &a…...

【ESP32】ESP32物联网应用:MQTT控制与状态监测

ESP32物联网应用:MQTT控制与状态监测 引言 在物联网时代,远程监测和控制设备已经成为现实生活中常见的需求。本文将介绍如何使用ESP32微控制器配合MQTT协议,实现一个简单而强大的物联网应用:远程状态监测和设备控制。我们将以巴…...

RabbitMQ运维

RabbitMQ运维 一.集群1.简单介绍2.集群的作用 二.搭建集群1.多机多节点搭建步骤 2.单机单节点搭建步骤 3.宕机演示 三.仲裁队列1.简单介绍2.Raft协议Raft基本概念主节点选举选举过程 3.仲裁队列的使用 四.HAProxy负载均衡1.安装HAProxy2.HAProxy的使用 一.集群 1.简单介绍 Ra…...

Ansible 实战:Roles,运维的 “魔法函数”

一、介绍 你现在已经学过tasks和handlers,那么,最好的playbook组织方式是什么呢?答案很简单:使用roles!roles基于一种已知的文件结构,能够自动加载特定的vars_files、tasks以及handlers。通过roles对内容进…...

CVAT安装和使用(Windows)

必要组件安装 WSL2 Docker Git Chrome Install WSL2 (Windows subsystem for Linux) refer to this official guide. WSL2 requires Windows 10, version 2004 or higher. After installing WSL2, install a Linux Distribution of your choice. 安装 WSL2(适用…...

Spring 中的 bean 生命周期

🌱 一、什么是 Bean 生命周期? 在 Spring 容器中,一个 Bean 从“创建 → 初始化 → 使用 → 销毁”,经历了完整的生命周期。 Spring 提供了 多个扩展点 让你可以在这些阶段做事情,比如注入资源、日志记录、连接资源、清…...

关于JVM和OS中的指令重排以及JIT优化

关于JVM和OS中的指令重排以及JIT优化 前言: 这东西应该很重要才对,可是大多数博客都是以讹传讹,全是错误,尤其是JVM会对字节码进行重排都出来了,明明自己测一测就出来的东西,写出来误人子弟… 研究了两天&…...

微软推出首款量子计算芯片Majorana 1

全球首款拓扑架构量子芯片问世,2025年2月20日,经过近20年研究,微软推出了首款量子计算芯片Majorana 1,其宣传视频如本文末尾所示。 微软表示,开发Majorana 1需要创造一种全新的物质状态,即所谓的“拓扑体”…...

数组练习题总结

一、求出数组中的最大值let arr [1, 2, 5, 7];let max 0;for (i 0; i < arr.length; i) {// console.log(max);if (max < arr[i]) {max arr[i];}}console.log(max); 首先生成一个数组&#xff0c;设一个变量为保存最大值&#xff0c;写一个循环&#xff0c;在循环里写…...

Kotlin 中的 `reified` 关键字全解析:保留类型信息 + 优化高阶函数的双重魔法

在使用 Kotlin 编写泛型函数时&#xff0c;你是否遇到过这样的尴尬&#xff1a;你想判断某个对象是不是泛型类型 T&#xff0c;结果却发现代码根本编译不过&#xff1f;这是因为 Kotlin 和 Java 一样&#xff0c;泛型在运行时会被类型擦除。 为了解决这个问题&#xff0c;Kotl…...

在CPU服务器上部署Ollama和Dify的过程记录

在本指南中&#xff0c;我将详细介绍如何在CPU服务器上安装和配置Ollama模型服务和Dify平台&#xff0c;以及如何利用Docker实现这些服务的高效部署和迁移。本文分为三大部分&#xff1a;Ollama部署、Dify环境配置和Docker环境管理&#xff0c;适合需要在本地或私有环境中运行A…...

【计网】TCP 协议详解 与 常见面试题

三次握手、四次挥手的常见面试题 不用死记&#xff0c;只需要清楚三次握手&#xff0c;四次挥手的流程&#xff0c;回答的时候心里要记住&#xff0c;假设网络是不可靠的 问题(1)&#xff1a;为什么关闭连接时需要四次挥手&#xff0c;而建立连接却只要三次握手&#xff1f; 关…...

Java 基础-31-枚举-认识枚举

在Java编程语言中&#xff0c;枚举&#xff08;Enum&#xff09;是一种特殊的类&#xff0c;它允许一组固定的常量。它们非常适合用来表示一组固定的值&#xff0c;比如星期几、季节、颜色等。枚举自Java 5开始引入&#xff0c;为定义常量提供了一种更强大和方便的方式。本文将…...

7.4 SVD 的几何背景

一、SVD 的几何解释 SVD 将矩阵分解成三个矩阵的乘积&#xff1a; ( 正交矩阵 ) ( 对角矩阵 ) ( 正交矩阵 ) (\pmb{正交矩阵})\times(\pmb{对角矩阵})(\pmb{正交矩阵}) (正交矩阵)(对角矩阵)(正交矩阵)&#xff0c;用几何语言表述其几何背景&#xff1a; ( 旋转 ) ( 伸缩 )…...

低延迟云网络的核心技术

低延迟云网络通过架构优化、协议创新、硬件加速等多维度技术手段,将数据传输延迟降低至毫秒级甚至微秒级。 1. 网络架构优化 1.1 扁平化网络Leaf-Spine 架构 减少网络层级,缩短数据转发路径(如数据中心内部一跳可达)。 扁平化网络Leaf-Spine(叶子-脊椎)架构是一种现代…...

C++的多态-上

目录 多态的概念 多态的定义及实现 1.虚函数 2. 多态的实现 2.1.多态构成条件 2.2.虚函数重写的两个例外 (1)协变(基类与派生类虚函数返回值类型不同) (2)析构函数的重写(基类与派生类析构函数的名字不同) 2.3.多态的实现 2.4.多态在析构函数中的应用 2.5.多态构成条…...

内存与显存:从同根生到殊途异路的科技演进

在现代计算机的世界里&#xff0c;内存和显存是两个不可或缺的硬件组件。它们看似功能相近&#xff0c;却在发展历程中逐渐分道扬镳&#xff0c;各自服务于不同的计算需求。今天&#xff0c;我们将从一根内存条和一块显卡入手&#xff0c;深入探讨内存与显存的异同&#xff0c;…...

手搓多模态-04 归一化介绍

在机器学习中&#xff0c;归一化是一个非常重要的工具&#xff0c;它能帮助我们加速训练的速度。在我们前面的SiglipVisionTransformer 中&#xff0c;也有用到归一化层&#xff0c;如下代码所示&#xff1a; class SiglipVisionTransformer(nn.Module): ##视觉模型的第二层&am…...

【C++】第八节—string类(上)——详解+代码示例

hello&#xff0c;又见面了&#xff01; 云边有个稻草人-CSDN博客 C_云边有个稻草人的博客-CSDN博客——C专栏&#xff08;质量分高达97&#xff01;&#xff09; 菜鸟进化中。。。 目录 一、为什么要学习string类&#xff1f; 1.1 C语言中的字符串 1.2 面试题(暂不做讲解) …...

Java 数组与 ArrayList 核心区别解析:从源码到实战!!!

&#x1f31f; Java 数组与 ArrayList 核心区别解析&#xff1a;从源码到实战 &#x1f4a1; Java 开发者必读&#xff01; 数组&#xff08;Array&#xff09;和 ArrayList 是 Java 中最常用的数据存储结构&#xff0c;但它们的底层设计、性能表现和适用场景差异显著。本文通…...

【易飞】易飞批量选择品号处理方法,工作效率提升300%

开窗选择品号方式要么手动输入,要么以什么开头、包含、从A物料到B物料查询后返回的有规律的品号。对于没有规律且大量品号的处理方式是否有便捷的方法呢? 尤其在通常在查询多阶材料清单,查询库存明细表,整批变更元件等如品号无规律情况下,只能一个个选择,无法通过EXCEL方…...

【最新版】啦啦外卖v64系统独立版源码+全部小程序APP端+安装教程

一.系统介绍 啦啦外卖跑腿平台独立版&#xff0c;使用的都知道该系统功能非常强大&#xff0c;应该说是目前外卖平台功能最全的一套系统。主要是功能非常多&#xff0c;拿来即用&#xff0c;包括客户端小程序、配送端小程序、商户端小程序&#xff0c;还有对应四个端的APP源码…...