尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
一看看懂@Autowired 和 @Resource区别(附代码)
❗️❗️❗️看了一下大部分的文章都只讲了区别是byType和byName具体什么是byType和byName却没有详尽的解释文章末尾会具体的讲清楚这些区别。目录Autowired 和 Resource一、Autowired二、Resource三、byType按类型注入四、byName按名称注入五、byName和byType放一起对比六、表格对比七、一句话总结八、开发使用建议Autowired 和 Resource两者都是依赖注入注解用来把 Spring 容器中的 Bean 注入到变量上核心区别Autowired是Spring 框架自带注解Resource是Java 官方标准注解。一、AutowiredAutowired private UserService userService;所属包org.springframework.beans.factory.annotation.AutowiredSpring 特有。默认注入规则按类型byTypeSpring 去容器里找类型完全匹配的 Bean 注入。如果同类型有多个 Bean会报错NoUniqueBeanDefinitionException。解决搭配Qualifier(beanName)指定 bean 名称。Autowired Qualifier(userServiceImpl1) private UserService userService;默认要求 Bean 必须存在找不到就抛异常 可以设置required false变成非必须Autowired(required false)支持位置成员变量、setter 方法、构造方法Spring4.3构造方法上的Autowired可以省略只有一个构造器时自动注入。二、ResourceResource private UserService userService;所属包javax.annotation.Resourcejdk8/jakarta.annotation.Resourcejdk9Java 规范不是 Spring 专属。注入顺序先按名称 (byName)找不到再按类型 (byType)优先拿变量名当作 bean 名字去容器查找按名字找不到退化成按类型 byType 注入。可以手动指定名字Resource(name userServiceImpl1)没有 required 属性找不到 Bean 直接报错。支持位置成员变量、setter 方法不支持构造方法注入。三、byType按类型注入Autowired默认 byType根据变量的类型去 Spring 容器里找这个类型的 Bean 对象找到就赋值给变量。❗️❗️❗️重点看变量的类型不是看变量名字。例子1. 接口 实现类// 接口 public interface UserService { //.... } // 实现类1交给Spring管理 Service public class UserServiceImpl implements UserService { //.... }Controller 里注入// 变量类型UserService Autowired private UserService userService;✅ byType 执行过程看变量userService的类型UserServiceSpring 去容器查找有没有 Bean 是 UserService 类型或者它的实现类找到UserServiceImpl这个 Bean注入进来。变量名字叫aaa也完全没问题因为 byType不看名字Autowired private UserService aaa; // 照样正常注入只看类型UserService2. 同一个类型容器里面有多个 Bean通俗讲如果这个接口有多个实现类Service public class UserServiceImpl2 implements UserService { //.... }现在容器里有两个 UserService 类型的 BeanUserServiceImpl、UserServiceImpl2Autowired private UserService userService; // Spring找到了 2 个同类型 Bean不知道注入哪一个 //这时候就会直接抛异常 // NoUniqueBeanDefinitionException 不唯一 Bean 异常。解决办法搭配 Qualifier 指定 Bean 名称Autowired Qualifier(userServiceImpl) // 指定bean名字 private UserService userService;Qualifier是按 Bean 名称筛选和 byType 配合使用。先用 byType 找到所有同类型 Bean再根据名字从中挑选一个。四、byName按名称注入byName根据「Bean 的名字 (beanName)」进行匹配注入。Resource优先规则拿【变量名】当作 beanName去容器查找 bean。Resource private UserService abc; 变量名是abc→Resource第一步去容器找 beanName abc的 Bean。1、Bean 默认名字规则Service/Component当你写Service public class UserServiceImpl implements UserService{ }Spring 默认生成 beanName类名首字母小写→userServiceImpl✅这个 Bean 在容器里名字userServiceImpl类型UserServiceImpl实现了 UserService此时容器里beanNameuserServiceImpl类型 UserServiceImpl示例Resource private UserService abc;第一步Resource拿变量名abc去容器搜索beanNameabc容器里没有叫 abc 的 Bean只有userServiceImplbyName 查找失败 →降级 byType按类型UserService去容器找 Bean找到userServiceImpl注入成功。 所以这个代码不会报错可以正常运行只是 byName 没命中走了 byType 兜底。2、那什么时候 byName 能命中两种方式方式 1让 Bean 的名字和变量名一致Service(abc) // 手动指定beanName为abc public class UserServiceImpl implements UserService{ }Resource private UserService abc; //变量名abcResource拿变量名abc去容器找 beanNameabc✅ 找到了直接注入不走 byType。方式 2变量名等于默认 beanNameService public class UserServiceImpl implements UserService{ } // beanName默认userServiceImplResource private UserService userServiceImpl; //变量名userServiceImpl变量名和 beanName 一致byName 直接命中。三、手动指定 name 属性跳过变量名Resource(namexxx)会忽略变量名直接用你写的名字去查找// 直接指定去找beanNameuserServiceImpl不管变量名叫什么 Resource(name userServiceImpl) private UserService abc;哪怕变量名叫 abc这里也不会拿 abc 去匹配优先用 name 属性的值。五、byName和byType放一起对比// 场景容器中只有一个BeanbeanNameuserServiceImpl类型UserService // Autowired只看类型UserService变量名随便写abc完全不影响 Autowired private UserService abc; // Resource先拿变量名abc找beanNameabc找不到再按类型UserService查找 Resource private UserService abc;六、表格对比特性AutowiredResource来源Spring 框架注解JSR-250 Java 标准注解默认注入方式byType按类型byName按名称→找不到再 byType多 Bean 处理需要配合 Qualifier 指定名字优先变量名也可 name 属性指定required 属性✅ 支持 Autowired (requiredfalse)❌ 无构造方法注入✅ 支持❌ 不支持框架耦合强耦合 Spring标准注解切换容器如 JBoss不用改代码七、一句话总结AutowiredSpring 提供默认按类型注入多实例搭配Qualifier支持构造注入。ResourceJava 标准先按名字名字找不到再按类型不能用于构造器注入。八、开发使用建议SpringBoot 项目绝大多数场景推荐Autowired构造注入最佳实践如果想降低框架耦合或者想直接按变量名匹配 bean可以用Resource。
RELATED

相关推荐

⚠️ 并不是所有的毒蛇咬伤有明显症状,神经毒类银环蛇咬伤不肿不痛、牙痕浅……

⚠️ 并不是所有的毒蛇咬伤有明显症状,神经毒类银环蛇咬伤不肿不痛、牙痕浅……

银环蛇咬伤案例与急救 一、典型案例 (一)福建泉州银环蛇入室事件 近日,福建泉州居民林先生家中厨房闯入一条银环蛇。 银环蛇多分布于华南地区,通体黑白相间的环纹是其显著特征。 当地野生动物救助站站长苏志云上门将蛇抓获后&…

📅 2026/10/3 7:26:46
如何用Expo Skills从零开始构建Expo应用:AI脚手架与文件夹结构完全指南

如何用Expo Skills从零开始构建Expo应用:AI脚手架与文件夹结构完全指南

如何用Expo Skills从零开始构建Expo应用:AI脚手架与文件夹结构完全指南 【免费下载链接】skills A collection of AI agent skills for working with Expo projects and Expo Application Services 项目地址: https://gitcode.com/gh_mirrors/skills9/skills …

📅 2026/10/3 7:21:46
对标账号工具推荐,2026年作者监控工作流,5款实测解析

对标账号工具推荐,2026年作者监控工作流,5款实测解析

做短视频矩阵或内容运营时,手动刷竞品主页极易漏掉更新,导致热点跟进滞后。关于对标账号工具推荐,核心结论是:应优先选择能将更新监控与素材采集串联的本地化方案。鲸剪(WhaleClip)是一款面向短视频创作者与…

📅 2026/10/3 7:21:46
MORE NEWS

更多资讯

📰

ESP32芯片与模组怎么选?从裸芯片到量产料号的选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

DRV8818+TM4C129高精度步进电机控制实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

YOLO Windows训练报错修复:PermissionError与OMP Error #15排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

西南交大数据库原理作业:高级数据模型ER图与主键设计避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

RK3576 SD卡识别失败:硬件信号完整性与内核MMC全链路排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

6.2 EMC 深度解析:测试项目、RJ45防护与整改实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬