@Resource 按字段名查找的坑
Spring Boot 启动失败BeanNotOfRequiredTypeExceptionnacosGracefulShutdownDelegate连环报错分析一、错误现象应用启动时直接失败控制台打印大量异常堆栈主要包括两类错误1. 核心错误导致启动失败org.springframework.beans.factory.BeanCreationException: Error creating bean with name assessmentIndicatorSyncJob: Injection of resource dependencies failed Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name assessmentIndicatorCalcServiceImpl: Injection of resource dependencies failed Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named tenantFrameworkService is expected to be of type ...TenantCommonApi but was actually of type ...TenantFrameworkServiceImpl2. 次生错误Context 关闭时反复出现org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name nacosGracefulShutdownDelegate: Singleton bean creation not allowed while singletons of this factory are in destruction该错误重复出现5~6 次随后应用退出。二、错误根因分析2.1 定位问题代码ServicepublicclassAssessmentIndicatorCalcServiceImplimplementsAssessmentIndicatorCalcService{ResourceprivateTenantCommonApitenantFrameworkService;// ← 问题在这里// ...}2.2Resource注入机制Resource的查找顺序是先按 bean name字段名匹配匹配不到再按类型匹配因为字段名叫tenantFrameworkServiceSpring 就去容器中找名为tenantFrameworkService的 Bean。2.3 容器中实际存在什么容器中确实有一个 Bean 叫tenantFrameworkService但它来自yudao-spring-boot-starter-biz-tenant模块// TenantFrameworkServiceImpl.javaRequiredArgsConstructorpublicclassTenantFrameworkServiceImplimplementsTenantFrameworkService{// 它实现的是 TenantFrameworkService 接口privatefinalTenantCommonApitenantApi;// 内部包装了 TenantCommonApi}而代码中声明的类型是// TenantCommonApi.java — 这是一个 Feign 客户端接口FeignClient(nameRpcConstants.SYSTEM_NAME)publicinterfaceTenantCommonApi{// RPC 远程调用接口CommonResultTenantRespDTOgetTenant(RequestParam(id)Longid);}2.4 类型关系类/接口类型说明TenantCommonApiFeign 客户端接口RPC 远程调用通过 HTTP 调用 system-serverTenantFrameworkService本地服务接口定义本地租户服务方法TenantFrameworkServiceImpl本地服务实现类实现TenantFrameworkService内部包装了TenantCommonApi并加了 Guava 缓存TenantFrameworkServiceImpl不实现TenantCommonApi它们是两个完全不同的类型体系。2.5 结论字段名声明的类型容器中实际匹配到的 Bean结果tenantFrameworkServiceTenantCommonApiTenantFrameworkServiceImpl类型TenantFrameworkService❌BeanNotOfRequiredTypeException三、Nacos 报错为什么出现3.1 事件链① BeanNotOfRequiredTypeException (tenantFrameworkService 类型不匹配) ↓ ② ApplicationContext.refresh() 失败 → 调用 doClose() 清理 ↓ ③ doClose() 发布 ContextClosedEvent ↓ ④ Nacos 的 nacosGracefulShutdownDelegate 监听器收到事件 ↓ ⑤ 该监听器尝试 getBean() → 但 BeanFactory 已在销毁状态 ↓ ⑥ BeanCreationNotAllowedException: Singleton bean creation not allowed...3.2 为什么重复 5~6 次看堆栈中间NamedContextFactory.destroy() ← Spring Cloud LoadBalancer 的子容器销毁 → AbstractApplicationContext.close() → doClose() 发布 ContextClosedEvent → nacosGracefulShutdownDelegate 再次尝试 getBean()NamedContextFactorySpring Cloud LoadBalancer会为每个服务创建独立的子 ApplicationContext。销毁时每个子 Context关闭都会发布ContextClosedEventNacos 监听器又注册在每个子 Context 中所以触发多次。3.3 错误性质错误性质原因BeanNotOfRequiredTypeException根因Resource字段名导致按名称匹配到错误的 BeanBeanCreationNotAllowedException次生启动失败后关闭 Context 时Nacos 在销毁阶段试图 getBeanNacos 线程池/HttpClient 销毁日志正常清理容器销毁时的正常善后动作四、解决方案4.1 修复方法将字段名改为不与任何 Bean 名冲突让Resource退化为按类型匹配// 修改前ResourceprivateTenantCommonApitenantFrameworkService;// ❌ 按名称匹配到 TenantFrameworkServiceImpl// 修改后ResourceprivateTenantCommonApitenantCommonApi;// ✅ 按类型匹配到 TenantCommonApi 的 Feign Bean同时删除无用的 import// 删除这行从未使用importcn.iocoder.yudao.framework.tenant.core.service.TenantFrameworkService;4.2 修复后的调用// 使用处同步修改CommonResultTenantRespDTOcommonResulttenantCommonApi.getTenant(TenantContextHolder.getTenantId());4.3 原理说明字段名改为tenantCommonApi后Spring 找不到名为tenantCommonApi的 Bean于是退回到按类型匹配正确匹配到 Feign 框架自动创建的TenantCommonApi代理 Bean注入成功。五、教训与最佳实践5.1ResourcevsAutowired注解默认匹配方式注意事项Resource先按 bean name再按 type字段名会影响注入结果Autowired先按 type再按 name字段名一般不影响注入除非有多个同类型 Bean5.2 字段命名建议字段名不要与其他已知的 Bean 名相同否则Resource会按名称匹配字段名应该反映声明的类型而不是想要的功能例如TenantCommonApi类型的字段就叫tenantCommonApi而不是tenantFrameworkService5.3 遇到类似错误时的排查思路找到最底层的Caused by而非最上面的报错看BeanNotOfRequiredTypeException中的三个关键信息Bean 名tenantFrameworkService期望类型TenantCommonApi实际类型TenantFrameworkServiceImpl检查字段声明是否与 Bean 名冲突上层的 Nacos 报错通常是次生灾害忽略即可六、参考Spring Resource AnnotationSpring Cloud Nacos Graceful ShutdownDefaultSingletonBeanRegistry 源码

相关新闻

基于DRV2605L评估套件的多驱动器触觉反馈系统设计与实战

基于DRV2605L评估套件的多驱动器触觉反馈系统设计与实战

1. 项目概述与核心价值 如果你正在设计下一代智能手表、游戏手柄或者车载中控屏,想让用户每一次点击、滑动和确认都获得清晰、细腻且有层次的物理反馈,那么触觉反馈技术就是你绕不开的核心。传统的“嗡嗡”震动早已过时,现代交互追求的是精准…

2026/9/25 10:49:48 阅读更多 →
网络恶搞事件的技术解析:从AI生成到传播分析

网络恶搞事件的技术解析:从AI生成到传播分析

这次我们来看一个很有意思的网络现象——"网友恶搞引发热议,谁干的?💀"事件。这个事件最近在社交媒体上引发了广泛讨论,涉及网络恶搞行为的边界、传播机制以及背后的技术实现方式。作为技术从业者,我们更关注…

2026/9/17 0:27:10 阅读更多 →
大模型Agent在智能客服中的架构设计与优化实践

大模型Agent在智能客服中的架构设计与优化实践

1. 大模型Agent与智能客服的现状与挑战最近两年,大模型技术的爆发式发展正在彻底改变智能客服领域的面貌。作为从业者,我亲眼见证了从传统规则引擎到基于大模型的对话系统的转变过程。以美团智能客服为例,其日均处理对话量已突破千万级别&…

2026/10/2 1:07:01 阅读更多 →

最新新闻

2026客户拜访视频自动生成笔记,TaoToken统一Key接入哪款AI工具好用?

2026客户拜访视频自动生成笔记,TaoToken统一Key接入哪款AI工具好用?

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

2026/10/2 23:30:50 阅读更多 →
Agent之Framework:Paperclip的安装和使用方法、案例应用之详细攻略(含TaoToken统一Key配置)

Agent之Framework:Paperclip的安装和使用方法、案例应用之详细攻略(含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/2 23:30:50 阅读更多 →
开关电源EMC整改:PCB环路与变压器寄生参数是关键

开关电源EMC整改:PCB环路与变压器寄生参数是关键

1. 为什么EMC整改总在滤波电容上打转,却没人动PCB和变压器?开关电源EMC不过关——这几乎是每个硬件工程师职业生涯里绕不开的“魔咒”。你反复换掉输入端的X电容、Y电容,加粗共模电感线径,把滤波器从两级堆到三级,示波…

2026/10/2 23:30:50 阅读更多 →
零基础靠AI做微信小游戏,仅花30元完整上线

零基础靠AI做微信小游戏,仅花30元完整上线

文章目录前言1. 先唠唠我都薅了哪些工具羊毛2. 通勤路上,聊天聊出游戏原型MVP3. 备案千万不要等做完游戏再动手!血泪教训4. H5转微信小游戏,整个项目最折磨人的环节5. 四个大坑,大家直接抄我的避坑作业5.1 坑一:AI生成…

2026/10/2 23:30:50 阅读更多 →
HIL测试中的总线与通信协议:从CAN到车载以太网的实战解析

HIL测试中的总线与通信协议:从CAN到车载以太网的实战解析

干HIL测试这行当的,时间久了都会有个感觉:真正让台架复杂到让人头疼的,往往不是那个被控对象的数学模型,而是台架上那一堆总线接口。模型算得再快,信号发不出去或者报文格式不对,整个闭环就是废的。很多刚接…

2026/10/2 23:30:50 阅读更多 →
9款AI论文工具实测:从开题报告到文献综述,TaoToken统一Key怎么配

9款AI论文工具实测:从开题报告到文献综述,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/2 23:29:48 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集: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/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

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

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

2026/10/1 19:41:40 阅读更多 →
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/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/2 10:36:31 阅读更多 →
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/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练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/2 6:09:11 阅读更多 →