首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >大聪明助你拿Offer | 你知道 @Autowired 和 @Resource之间的区别吗??

大聪明助你拿Offer | 你知道 @Autowired 和 @Resource之间的区别吗??

作者头像
不肯过江东丶
发布2026-06-17 21:25:57
发布2026-06-17 21:25:57
840
举报

你知道 @Autowired 和 @Resource之间的区别吗?

前言

“面试造火箭,入职拧螺丝?” 别慌!这里没有“茴香豆的茴有几种写法”,只有最实用、最高频、最能唬住面试官的 Java 面试题解析!

正文

每日一题:你知道 @Autowired 和 @Resource之间的区别吗?

难度系数:

一、来源

  • @Autowired:它是 Spring 框架提供的注解,主要用于实现依赖注入,以此来降低代码间的耦合度。
  • @Resource:此注解来自 JSR - 250 规范,属于 Java 的标准注解,这意味着它并非 Spring 特有的,在其他支持 JSR - 250 规范的 Java 框架中也能使用。

二、注入方式

@Autowired:默认采用按类型(byType)的方式进行注入。也就是 Spring 会在容器中查找与被注入对象类型匹配的 Bean 来完成注入。要是存在多个匹配类型的 Bean,就会报错。不过可以结合 @Qualifier 注解按照名称(byName)来进一步指定要注入的 Bean,例如 @Qualifier(“userBizService2”)。

代码语言:javascript
复制
@ServicepublicclassUserService{    @Autowired    private UserBizService userBizService;

    // 若有多个 UserRepository 类型的 Bean,可使用 @Qualifier 按名称指定    @Autowired    @Qualifier("userBizService2")    private UserBizService userBizService;}

@Resource:默认按照名称(byName)进行注入。Spring 会先依据属性名在容器中查找对应的 Bean,若找不到,再按类型(byType)查找。

代码语言:javascript
复制
@ServicepublicclassUserService{    @Resource    private UserBizService userBizService;}

三、属性设置

@Autowired:有 required 属性,其默认值为 true,表示注入的 Bean 必须存在,若不存在就会抛出异常。若将 required 属性设为 false,则当 Bean 不存在时不会报错,而是将注入的对象设为 null。

代码语言:javascript
复制
@ServicepublicclassUserService{    @Autowired(required=false)    private UserBizService userBizService;}

@Resource:有 name 和 type 两个重要属性。name 属性用于指定要注入的 Bean 的名称,type 属性用于指定要注入的 Bean 的类型。

代码语言:javascript
复制
@ServicepublicclassUserService{    @Resource(name = "userBizService", type = UserBizService.class)    private UserBizService userBizService;}

小结

4

📢 面试不是终点,而是技术成长的起点!持续关注本专栏,更多硬核内容在路上!

如果觉得有用,别忘了点赞+关注,你的支持是我更新的最大动力❤️

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大聪明教你学Java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档