@Resource详解
Resource是 JSR-250 规范提供的依赖注入注解由 JDK 定义Spring 对其提供了完整支持。它和Autowired功能相似但装配规则和适用场景有明显区别。一、来源与定义Resource的全限定名是javax.annotation.ResourceJava 8 及以前或jakarta.annotation.ResourceJakarta EE 9Spring Boot 3 使用。它不属于 Spring 专有而是 Java 标准库的一部分。在 Spring Boot 3 项目中需要确保引入了jakarta.annotation-api依赖通常由spring-boot-starter自动传递。importjakarta.annotation.Resource;ServicepublicclassUserService{ResourceprivateUserDaouserDao;}二、装配规则Resource的装配顺序与Autowired相反默认按名称byName匹配。如果不指定name属性使用字段名或 setter 方法对应的属性名作为 Bean 名称。按名称找不到时回退到按类型byType匹配。如果指定了name只按名称查找不按类型。如果指定了type只按类型查找。ServicepublicclassUserService{// 字段名 userDao先按名称 userDao 查找ResourceprivateUserDaouserDao;}如果容器中只有一个UserDao类型的 Bean但它的名称不是userDaoResource会先尝试按userDao查找找不到再按类型注入。三、name 和 type 属性1. name 属性显式指定 Bean 名称只按名称匹配。Resource(nameuserDaoImpl)privateUserDaouserDao;此时容器中必须存在名称恰好为userDaoImpl的 Bean否则抛出NoSuchBeanDefinitionException。2. type 属性显式指定类型只按类型匹配。Resource(typeUserDao.class)privateUserDaouserDao;如果同类型有多个 Bean会抛出NoUniqueBeanDefinitionException。3. name 和 type 同时指定同时指定时要求容器中存在名称和类型都匹配的 Bean否则报错。四、使用位置Resource支持的位置字段Setter 方法ServicepublicclassUserService{privateUserDaouserDao;ResourcepublicvoidsetUserDao(UserDaouserDao){this.userDaouserDao;}}Resource不支持构造器注入方法参数注入Bean方法参数required false语义五、与 Autowired 的对比对比维度ResourceAutowired来源JSR-250JDKSpring 专有默认匹配先按名称再按类型先按类型再按名称指定名称name属性Qualifier指定类型type属性无需指定默认按类型required 属性不支持支持required false构造器注入不支持支持方法参数注入不支持支持Primary 支持不支持支持处理类CommonAnnotationBeanPostProcessorAutowiredAnnotationBeanPostProcessorResource更适合“按名称注入”的场景代码更简洁。Autowired功能更丰富支持构造器注入和可选依赖。六、底层处理机制Resource由CommonAnnotationBeanPostProcessor处理。它是 Spring 容器中的一个BeanPostProcessor同时负责PostConstruct、PreDestroy等 JSR-250 注解。处理时机在 Bean 生命周期的属性填充阶段populateBean()通过postProcessProperties()方法完成注入。简化流程// CommonAnnotationBeanPostProcessorpublicPropertyValuespostProcessProperties(PropertyValuespvs,Objectbean,StringbeanName){// 1. 查找 Resource 注解的元数据InjectionMetadatametadatafindResourceMetadata(beanName,bean.getClass(),pvs);// 2. 执行注入metadata.inject(bean,beanName,pvs);returnpvs;}注入时ResourceElement.getResourceToInject()会根据name和type调用beanFactory.resolveDependency()或beanFactory.getBean(name)获取目标 Bean。七、常见问题1. 找不到 BeanNoSuchBeanDefinitionException: No bean named userDao available原因字段名与 Bean 名称不一致且容器中没有该名称的 Bean。解决指定name属性或将字段名改为与 Bean 名称一致。2. 同类型多个 Bean 冲突NoUniqueBeanDefinitionException: expected single matching bean but found 2原因按名称找不到回退到按类型但同类型有多个 Bean。解决显式指定name属性。3. Spring Boot 3 中找不到 jakarta.annotation.Resource需要确认依赖dependencygroupIdjakarta.annotation/groupIdartifactIdjakarta.annotation-api/artifactId/dependencySpring Boot 3 的spring-boot-starter已经包含该依赖。4. Resource 不支持构造器注入构造器注入只能用Autowired或省略注解单构造方法时。5. 静态字段无法注入Resource不能直接注入静态字段。需要通过实例方法赋值给静态变量。八、最佳实践需要按名称注入时优先使用Resource代码比Autowired Qualifier更简洁。需要构造器注入时使用Autowired或RequiredArgsConstructor。需要可选依赖时使用Autowired(required false)。在非 Spring 环境如标准 Java EE中Resource可保持代码的可移植性。团队统一风格避免同一个项目中混用两种注解导致理解成本增加。九、总结Resource是 JSR-250 标准的依赖注入注解默认按名称匹配找不到再按类型。它支持字段和 Setter 注入不支持构造器注入和required false。底层由CommonAnnotationBeanPostProcessor处理。维度核心要点来源JSR-250jakarta.annotation.Resource默认匹配先按名称再按类型属性name名称、type类型支持位置字段、Setter不支持构造器、方法参数、required false处理类CommonAnnotationBeanPostProcessor适用场景按名称注入、非 Spring 环境选择Resource还是Autowired取决于具体场景。按名称注入用Resource更直接构造器注入和可选依赖用Autowired更灵活。理解两者的装配顺序和底层处理能帮你在实际开发中做出合适的选择。

相关新闻

结构光三维扫描如何赋能CATIA逆向建模全流程

结构光三维扫描如何赋能CATIA逆向建模全流程

1. 项目概述:这不是一台“扫描仪”,而是一套可落地的逆向工程工作流起点“响西智能三维扫描仪”这个标题里藏着三个关键信号:品牌名“响西智能”、技术路径“3D结构光”、最终目标“逆向建模”。它不是在卖一个冷冰冰的硬件盒子,而…

2026/10/1 2:56:17 阅读更多 →
开源3D绘画工具ArmorPaint:PBR材质流程与iOS账号分享陷阱

开源3D绘画工具ArmorPaint:PBR材质流程与iOS账号分享陷阱

做3D美术的,尤其是常年和PBR流程打交道的,对ArmorPaint这个名字应该不陌生。这是一款完全开源的3D绘画工具,可以直接在模型表面绘制PBR贴图——Albedo、粗糙度、金属度、法线、AO、高度图,一套材质通道全部覆盖,平时在…

2026/10/1 2:56:17 阅读更多 →
SQL 转 ER 图连不出线?90% 是没写外键,捷码AI 一键补全(附实测图解)

SQL 转 ER 图连不出线?90% 是没写外键,捷码AI 一键补全(附实测图解)

把建表 SQL 导进 ER 图工具,得到的却是一堆互不相连的孤立表——这不是工具坏了,90% 的情况是你的 DDL 里根本没写外键约束。 工具读不到 FOREIGN KEY,自然画不出联系,最后你拿到的是一张"表清单",不是关系图…

2026/10/1 2:56:17 阅读更多 →

最新新闻

神经网络数据集预处理实战:从数据清洗到增强的完整工具链

神经网络数据集预处理实战:从数据清洗到增强的完整工具链

简介:一套基于Python的神经网络数据集预处理工具包,面向机器学习初、中级开发者,覆盖数据清洗、缺失值处理、标准化与归一化、特征提取及数据增强等常见环节,可帮助使用者在构建模型前快速整理高质量数据集。压缩包共收录12个文件…

2026/10/1 3:31:33 阅读更多 →
从PostMan到Newman:接口调试、自动化测试与持续集成全攻略

从PostMan到Newman:接口调试、自动化测试与持续集成全攻略

我入行做后端开发那会儿,最头疼的不是写代码,而是接口调试和联调。前后端各写各的,一联调就各种幺蛾子,当时全靠PostMan撑着。后来带团队、做技术分享,发现很多新人甚至连PostMan都没用过,还在用浏览器地址…

2026/10/1 3:31:33 阅读更多 →
数据预处理比模型更值得投入?Python神经网络数据管线实战

数据预处理比模型更值得投入?Python神经网络数据管线实战

简介:基于Python的神经网络数据集预处理软件压缩包,面向机器学习初学者和数据预处理工程师,聚焦数据清洗、集成、变换、特征提取与选择等核心环节,用于在模型训练前高效完成数据准备,解决原始数据不完整、不一致、维度…

2026/10/1 3:31:33 阅读更多 →
基于Python的信用卡客户高风险识别模型构建与实战解析

基于Python的信用卡客户高风险识别模型构建与实战解析

简介:一套基于Python的信用卡客户高风险识别完整项目,适合计算机相关专业学生用于毕业设计、课程设计或实训作业。项目从历史信用风险、经济风险、收入风险三个维度构建特征,采用K-Means聚类建模,并配套手肘法确定最优k值、雷达图…

2026/10/1 3:31:33 阅读更多 →
牡蛎状态检测数据集详解:YOLO标注、YOLOv8训练与避坑指南

牡蛎状态检测数据集详解:YOLO标注、YOLOv8训练与避坑指南

简介:面向水产养殖智能监测、海产加工自动化与海洋生态研究等场景的牡蛎状态检测数据集,可为研究人员、开发者和水产专业师生提供可直接训练的目标检测数据。数据集采集自实际养殖环境,包含1,058张牡蛎图像,完整标注闭合、过渡、开…

2026/10/1 3:31:33 阅读更多 →
iOS 上跑 Windows 程序:Wine+FEX-Emu+DXMT 兼容层实战

iOS 上跑 Windows 程序:Wine+FEX-Emu+DXMT 兼容层实战

1. 项目缘起:为什么要在 iOS 上折腾 Wine 兼容层第一次看到 "Madeira" 这个代号,是在一个跨平台兼容性讨论的角落里。它指向的核心命题其实很直接:能不能在 iOS 设备上跑起 Windows 的 x86-64 程序。这个问题听起来像是天方夜谭&am…

2026/10/1 3:30:33 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →