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

注解@Autowired和@Resource的区别

@Autowired@Resource 都是 Java 依赖注入的注解,但它们在来源、注入机制和使用细节上有重要区别。以下是核心对比:


1. 来源不同

注解所属规范包路径
@AutowiredSpring 框架专属org.springframework.beans.factory.annotation
@ResourceJava 标准 (JSR-250)javax.annotation

关键点

  • 用 Spring 项目:两者皆可
  • 需兼容非 Spring 环境(如 Jakarta EE):选 @Resource

2. 注入机制对比

@Autowired
  • 默认按类型注入(byType)
  • 匹配失败时按属性名匹配(隐式 byName)
  • 必须搭配 @Qualifier 显式指定 Bean 名
    @Autowired 
    @Qualifier("mysqlDatabase")
    private Database database;
    
@Resource
  • 默认按名称注入(byName → 属性名作为 Bean ID)
  • 名称未找到时 回退到按类型注入(byType)
  • 支持直接指定名称/类型
    @Resource(name = "oracleDatabase", type = Database.class)
    private Database db;
    

3. 处理空值的区别

注解允许依赖为空解决方案
@Autowired默认不可空设置 @Autowired(required = false)
@Resource默认允许空值无需额外配置

关于 @Resource 的空值处理,需要特别注意其默认行为与容器实现的差异,详细说明请看@Resource 注解的空值处理


4. 适用场景示例

场景 1:按类型注入
// 两者等效(唯一实现类时)
@Autowired
private UserRepository userRepo;@Resource
private UserRepository userRepo;
场景 2:多个同类型 Bean
@Component("memCache")
public class MemCache implements Cache { ... }@Component("redisCache")
public class RedisCache implements Cache { ... }// 方式一:@Autowired + @Qualifier
@Autowired
@Qualifier("redisCache")  // 显式指定名称
private Cache cache;// 方式二:@Resource 直接指定
@Resource(name = "redisCache")  // 按名称注入
private Cache cache;

5. 总结对比表

特性@Autowired@Resource
来源Spring 专属Java 标准 (JSR-250)
注入顺序类型 → 名称名称 → 类型
指定 Bean 名需配合 @Qualifier直接 name 属性
空值处理默认非空 (required = true)默认可为空
依赖需 Spring 环境无框架依赖 (需 javax.annotation)

选型建议

  1. Spring 项目
    • 习惯 Spring 生态 → @Autowired
    • 需要显式指定名称 → @Resource(nam e= "...")
  2. 跨框架/标准化项目
    • 优先选择 @Resource (避免耦合 Spring)
  3. 精确控制注入
    • 按类型 → @Autowired
    • 按名称 → @Resource

注意:两者避免混用!同一项目保持统一注解风格。

http://www.lryc.cn/news/588297.html

相关文章:

  • USB读写自动化压力测试
  • 【React Native】ScrollView 和 FlatList 组件
  • C++中STL六大组件List的简单介绍
  • UI前端大数据处理新挑战:如何高效处理实时数据流?
  • AI创作系列第18篇:海狸IM移动端UI统一大升级 - 从混乱到规范的技术重构之路
  • 华为MateBook D 16 SE版 2024款 12代酷睿版i5集显(MCLF-XX,MCLF-16)原厂OEM预装Win11系统
  • 浏览器自动化领域的MCP
  • Spring Boot + Thymeleaf + RESTful API 前后端整合完整示例
  • 单片机(STM32-串口通信)
  • 延迟双删
  • 【ASP.NET Core】内存缓存(MemoryCache)原理、应用及常见问题解析
  • 位置编码类型彩色图解
  • 张艺兴探班RED女团一周年舞台,见证21岁的梦想落地生根
  • 代码随想录算法训练营第二十天
  • 一文读懂现代卷积神经网络—稠密连接网络(DenseNet)
  • Journal of Engineering Mechanics and Machinery,工程力学期刊,1-2天录用,7天出版,即将送检!
  • 自定义类型 - 联合体与枚举(百度笔试题算法优化)
  • 前端将传回的List数据组织成树形数据并展示
  • 用于监测线性基础设施的分布式声学传感:现状与趋势
  • 深度剖析:动态接口代理核心原理与高级应用
  • APP测试之Monkey压力测试
  • Relocations in generic ELF (EM: 40)
  • Qt小组件 - 2(布局)瀑布流布局,GridLayout,FlowLayout
  • 虚拟列表组件如果滑动速度过快导致渲染性能问题
  • UART寄存器介绍
  • 前端学习5:Float学习(仅简单了解,引出flex)
  • 015 程序地址空间入门
  • Life:Internship in OnSea Day 22
  • 某ctv视频下载逆向思路
  • 云原生技术与应用-Containerd容器技术详解