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

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;

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

相关文章:

  • 用Scala玩转Flink:从零构建实时处理系统
  • L2-046 天梯赛的赛场安排 #二次手写cmp比较函数 这个模拟思路太神了
  • Nginx 负载均衡案例配置
  • [蓝桥杯青少年组省赛 2024] 通关游戏的最少能量值
  • 13-产品经理-产品多分支平台管理
  • 设计模式简述(九)命令模式
  • 【统计方法】降维方式;pca, t-sne, mds
  • 浙江西湖游记
  • TLS协议详解
  • 关于AI大模型的一些理解
  • 基于 Spring Boot 瑞吉外卖系统开发(一)
  • 从扩展黎曼泽塔函数构造物质和时空的结构-16
  • PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)
  • 棋盘问题(DFS)
  • 【文献研究】含硼钢中BN表面偏析对可镀性的影响
  • 使用OpenSceneGraph生成3D数据格式文件
  • 经典回溯问题———组合的输出
  • CentOS 部署 Nodejs
  • java面试篇 Redis+MySQL+Spring
  • 【C/C++】滑动谜题(leetcode T773)
  • 做网站需要学什么语言/信息发布网站有哪些
  • 赣州网站建设专家/西安排名seo公司
  • 技术支持 嘉兴网站建设/新手怎么做电商
  • 网站移动端和手机端分开做/南宁网络推广服务商
  • 速效成交型网站/宁波seo
  • wordpress建壁纸站/广告联盟app下载官网