新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/11/8 0:56:29来源:尧图网络
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恢复诊断能力再通过只读查询服务、无状态领域能力或合理事件拆分完成正式解环。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/8 22:42:07

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/8 2:22:29

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/8 8:25:50

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/8 22:41:24

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/8 3:02:34

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/8 3:02:33

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉