@Autowired与@Resource有什么区别

ps:如果这篇帖子对于还在找工作和找实习的你有所帮助,可以关注我,给本贴点赞、评论、收藏并订阅专栏;同时不要吝啬您的花花

在Spring依赖注入场景中,@Autowired@Resource是最常用的自动装配注解,二者功能相似但底层逻辑、设计规范、使用规则差异极大,直接决定了装配成功率和代码兼容性。以下从核心维度逐一拆解区别:

一、基础归属:规范来源不同

  • @Autowired:Spring框架专属注解,来源于org.springframework.beans.factory.annotation.Autowired,仅在Spring容器中生效,脱离Spring环境无法使用。
  • @Resource:Java官方JSR-250规范注解,来源于javax.annotation.Resource(Jakarta EE环境下为jakarta.annotation.Resource),是Java EE标准,Spring仅做兼容实现,通用性更强。

核心结论:@Autowired绑定Spring生态,@Resource遵循Java标准,跨框架迁移时@Resource兼容性更好。

二、装配逻辑:默认匹配规则天差地别

这是两者最核心的区别,直接影响多实现类场景下的装配结果:

1. @Autowired:默认按类型(byType)装配

  • Spring容器会优先查找与字段/方法参数类型匹配的Bean,若找到唯一匹配Bean,直接注入;
  • 若存在多个同类型Bean,Spring无法判定注入目标,直接抛出NoUniqueBeanDefinitionException异常;
  • 需配合@Qualifier注解指定Bean名称,才能实现按名称装配。

2. @Resource:默认按名称(byName)装配

  • 优先根据字段名/方法参数名匹配Spring容器中的Bean名称,找到则直接注入;
  • 若按名称匹配失败,再降级为按类型(byType)匹配;
  • 无需额外注解,可直接通过name属性指定目标Bean,适配多实现类场景更简便。

三、属性配置:支持参数与功能不同

核心属性

仅支持required(布尔值)

支持nametype、lookup等属性

required属性

默认true:必须找到匹配Bean,否则启动报错;设为false允许Bean为空

无原生required属性,需通过Spring扩展实现,默认强制注入

精准匹配

需搭配@Qualifier指定Bean名称

直接通过name=“beanName”指定,或type=“Bean.class”限定类型

四、扩展特性:作用范围与适配场景

  • 注入范围:两者均支持字段注入、构造器注入、Setter方法注入;但Spring官方推荐@Autowired用于构造器注入(依赖不可变),@Resource更适合字段/Setter快速注入。
  • 空值处理:@Autowired通过required=false允许空注入,@Resource无此原生属性,空注入需结合@Nullable或Optional实现。
  • 泛型支持:@Autowired对泛型Bean的适配更友好,可直接注入带泛型的依赖;@Resource对复杂泛型的匹配兼容性略差。

五、实战场景选择建议

  1. 优先用@Autowired:纯Spring项目、构造器注入、需要空值容错、依赖泛型Bean时;多实现类搭配@Qualifier使用。
  2. 优先用@Resource:跨框架/Java EE项目、需按名称快速装配、避免绑定Spring专属注解、简化多实现类注入时。

避坑提示:@Resource的name属性优先级高于type,若同时指定name和type,必须同时满足名称+类型匹配,否则注入失败。

核心区别速记

@Autowired:Spring专属、byType优先、需@Qualifier按名匹配、支持required空值控制;@Resource:Java标准、byName优先、自带name/type属性、通用性更强。

ps:如果这篇帖子对于还在找工作和找实习的你有所帮助,可以关注我,给本贴点赞、评论、收藏并订阅专栏;同时不要吝啬您的花花

Spring 文章被收录于专栏

本专栏聚焦Spring全生态体系,从IoC/AOP核心原理入手,覆盖Spring Boot自动配置、事务管理、Web开发等实战内容。拆解循环依赖、动态代理等高频面试难点,助力开发者从入门到精通,打通单体到微服务的技术链路,解决企业级开发痛点,提升架构设计与问题排查能力,成为Java后端进阶的必备技术专栏。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10551次浏览 93人参与
# 你的实习产出是真实的还是包装的? #
1855次浏览 42人参与
# 米连集团26产品管培生项目 #
5941次浏览 216人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7568次浏览 43人参与
# 简历第一个项目做什么 #
31666次浏览 335人参与
# 重来一次,我还会选择这个专业吗 #
433448次浏览 3926人参与
# 巨人网络春招 #
11324次浏览 223人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187111次浏览 1122人参与
# 牛客AI文生图 #
21423次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152352次浏览 888人参与
# 研究所笔面经互助 #
118899次浏览 577人参与
# 简历中的项目经历要怎么写? #
310220次浏览 4210人参与
# AI时代,哪些岗位最容易被淘汰 #
63649次浏览 823人参与
# 面试紧张时你会有什么表现? #
30506次浏览 188人参与
# 你今年的平均薪资是多少? #
213077次浏览 1039人参与
# 你怎么看待AI面试 #
180039次浏览 1255人参与
# 高学历就一定能找到好工作吗? #
64324次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76488次浏览 374人参与
# 我的求职精神状态 #
448046次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363380次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160641次浏览 1111人参与
# 校招笔试 #
470896次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务