首页/新闻资讯/正文详情

Spring Boot 升级暴露大量循环依赖:可以用 `@Lazy`,但不要停在那里

发布时间:2026/9/23 10:26:32 来源:云帆数科 栏目:资讯中心
Spring Boot 升级暴露大量循环依赖:可以用 `@Lazy`,但不要停在那里
问题背景老项目升级 Spring Boot 后经常在启动时看到The dependencies of some of the beans in the application context form a cycle很多人的第一反应是打开spring:main:allow-circular-references:true或者给其中一个注入点加Lazy。这些方法有时能让服务启动但它们回答的只是“怎样暂时创建 Bean”并没有回答“为什么两个业务服务必须互相依赖”。Lazy是否可以使用可以但建议把它定义为诊断手段或短期过渡方案。合理场景升级过程中需要先启动应用继续发现后面的兼容问题。循环链较长暂时无法确定最小拆分点。生产修复窗口很短需要先恢复服务再安排重构。不合理场景大量 Service 两两互相Lazy。把全局允许循环依赖作为永久配置。不记录依赖环和后续拆分任务。如何分析循环依赖假设存在SystemAdminService ↓ SystemRoleService ↓ SystemAdminService先检查双方实际使用的能力。经常会发现一方只需要查询角色名称。查询管理员基本信息。拼接附件路径。读取少量配置。这些能力不需要依赖完整业务 Service。三种常用拆分方式1. 拆只读 Query ServiceSystemAdminService ──→ SystemRoleQueryService SystemRoleService ──→ SystemAdminQueryServiceQuery Service 只提供稳定的读取能力不包含复杂写事务和反向业务调用。适合角色、管理员、配置、字典等高频读取场景。2. 拆无状态领域能力例如附件服务同时承担附件 CRUD。CDN 地址拼接。本地路径前缀移除。被分类、商品、订单等大量服务调用。可以将纯路径逻辑拆成AttachmentPathService无状态服务不再依赖附件业务 Service能直接切断多个依赖环。3. 用事件解耦后续动作如果 A 完成后需要通知 B 执行独立动作并且不要求同一个调用栈立即返回可以考虑领域事件或应用事件。但不要为了消除任何循环都改成异步事件。涉及强事务一致性的操作仍需明确边界。推荐实施流程第一步记录完整依赖环不要只看异常最后两个类。循环可能是A → B → C → D → A第二步单侧Lazy恢复启动选择风险较低、调用较少的一侧作为临时代理点。启动后继续收集其他循环而不是立即宣布问题解决。第三步统计调用方法列出依赖对象实际调用的方法。如果只调用一两个查询或格式化方法优先拆小接口。第四步按职责拆分拆分后应满足新服务职责单一。不依赖原始双方的完整实现。不为了“解环”复制业务规则。事务边界仍然明确。第五步移除临时方案删除单侧Lazy或全局循环依赖开关再次启动验证。常见误区用接口替换实现类就能解环Spring 注入接口仍会创建对应实现 Bean。如果实现之间互相依赖改成接口并不会消除循环。构造器注入导致循环改字段注入即可字段注入可能把错误推迟到运行期并没有改善设计。构造器注入反而更早暴露真实依赖。所有 Query Service 都直接访问 MapperQuery Service 是否可以访问 Mapper要结合项目分层约定。重点是避免它重新依赖完整业务 Service形成新的循环。总结Boot 升级只是让循环依赖变得可见。正确策略是用单侧Lazy恢复诊断能力再通过只读查询服务、无状态领域能力或合理事件拆分完成正式解环。

相关推荐

React Native Firebase 单仓构建工具链设计解析:prepare 依赖图、Nx 本地缓存与 watch 机制
React Native Firebase 单仓构建工具链设计解析:prepare 依赖图、Nx 本地缓存与 watch 机制

React Native Firebase 单仓构建工具链设计解析:prepare 依赖图、Nx 本地缓存与 watch 机制 【免费下载链接】react-native-firebase 🔥 A well-tested feature-rich modular Firebase implementation for React Native. Supports both iOS & Androi… · 2026/9/23 10:26:25

Jev 置信度与三档路由:阈值标定、Noul 无 confidence 与跨原语禁忌
Jev 置信度与三档路由:阈值标定、Noul 无 confidence 与跨原语禁忌

TypeSafe AI 的 Jev(System One)给出的是结构化决策加概率,不是散文。上线时真正决定「自动过 / 进复核 / 找人」的,往往是置信度与阈值,而不是 argmax 那一个标签。本文按官方三原语差异,把 Choice/Score … · 2026/9/23 10:26:18

如何评价一个STM32开源项目?从代码、原理图到仿真的避坑指南
如何评价一个STM32开源项目?从代码、原理图到仿真的避坑指南

上个月我在GitHub上翻到一个标着“完整开源”的STM32项目,作者放了一套看起来很全的资料:源码、原理图PDF、还有Proteus仿真文件。下载下来打开工程,编译一次通过,仿真也正常跑。当时我还挺高兴,结果后面把原理图对着代… · 2026/9/23 10:26:18

特效图片实战项目选型:5种方案避坑指南
特效图片实战项目选型:5种方案避坑指南

特效图片实战项目选型:5种方案避坑指南 学会语法却不知怎么搭项目,是无数开发者的通病。很多老鸟在面试或接 实战项目 时,往往卡在“特效图片”这类非核心但显眼的功能上。别被“特效”二字吓住,这背后其实是渲染引擎、资源加载策略和性能优化的博弈。… · 2026/9/23 11:47:30

OpenRLHF 多节点训练实战:基于 Ray 集群的跨机分布式 RLHF 完整指南
OpenRLHF 多节点训练实战:基于 Ray 集群的跨机分布式 RLHF 完整指南

OpenRLHF 多节点训练实战:基于 Ray 集群的跨机分布式 RLHF 完整指南 【免费下载链接】AI-Research-SKILLs Comprehensive open-source library of AI research and engineering skills for any AI model. Package the skills and your claude code/codex/gemini age… · 2026/9/23 11:47:04

5个高频面试题讲透幻灯片备注原理,告别代码跑不通
5个高频面试题讲透幻灯片备注原理,告别代码跑不通

5个高频面试题讲透幻灯片备注原理,告别代码跑不通 刚入职第一周,我拿着网上抄来的 PPT 自动化脚本去跑,结果报错 AttributeError: 'NotesSlide' object has no attribute 'text'… · 2026/9/23 11:46:51

3个致命坑让你发言变灾难一文搞懂开会发言技巧
3个致命坑让你发言变灾难一文搞懂开会发言技巧

3个致命坑让你发言变灾难一文搞懂开会发言技巧 刚进项目组那会儿,我最怕的就是周会。不是怕工作多,是怕开口。手里攥着PPT,手心全是汗,心里默念着“配置环境就卡半天”这种只有程序员才懂的焦虑,结果一上台,脑子直接死机。… · 2026/9/23 11:46:51

3步搭好国标行业项目,新手避坑指南
3步搭好国标行业项目,新手避坑指南

3步搭好国标行业项目,新手避坑指南 很多刚入行公路工程的朋友,对着《公路工程预算标准》里的代码头大。语法背得滚瓜烂熟,真上手搭项目却卡壳:数据怎么对齐?单位怎么换算?这就是典型的 新手避坑… · 2026/9/23 11:46:45

告别StackTrace报错,一文搞懂smv实战项目搭建
告别StackTrace报错,一文搞懂smv实战项目搭建

告别StackTrace报错,一文搞懂smv实战项目搭建 盯着屏幕上一堆红色的 StackTrace,你心里是不是在打鼓?明明只是跑个脚本,怎么就崩了?报错信息长得像天书,根本不知道从哪一行开始查。这种“报错一堆看不懂… · 2026/9/23 11:46:45

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码