当前位置: 首页 > news >正文

怎么解决Spring循环依赖问题

“解决”≠“让 Spring 兜底”,而是从根本上消除循环依赖
下面给出 4 个层次、12 种落地做法,按“先设计、后代码、再配置、最后兜底”的顺序排列,面试或实战都能直接拿来用。


1. 设计层(根治,推荐)

做法场景示例
1. 职责拆分 / 领域建模两个 Service 互相调 → 抽出第三个 ServiceOrderService ↔ PaymentService → 抽出 PaymentProcessor
2. 事件驱动 / 消息解耦同步调用Spring ApplicationEvent 或 MQ
3. 接口下沉把共同依赖抽象到 api 模块A 依赖 B 的接口,B 依赖 A 的接口

2. 代码层(低成本重构)

做法代码片段说明
4. Setter/Field 注入@Autowired lateinit var b: B让 Spring 能用三级缓存
5. @Lazy 延迟注入@Lazy @Autowired val b: B注入代理对象,真正用时才创建
6. 方法参数注入fun doIt(b: B)只在方法内部用,避免字段级循环
7. 抽工具类把公共逻辑放到 @Component Util两个 Service 都依赖 Util,而非彼此

3. 配置层(不改业务代码)

做法配置示例适用场景
8. ObjectProvider / ProviderObjectProvider<B> bProvider运行时按需取,打破字段级循环
9. @Configuration 手动装配@Bean fun a(b: B) = A(b)构造器循环时显式控制顺序
10. 调整作用域@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)多例 Bean 循环,但会牺牲单例语义

4. 兜底方案(Spring 自动)

做法说明风险
11. 保持默认三级缓存什么都不改仅对单例+Setter/Field 有效
12. 允许循环依赖(Spring Boot 2.6+)spring.main.allow-circular-references=true官方不推荐,升级可能失效

面试 15 秒总结

真正解决循环依赖,优先做领域拆分或事件驱动;
代码层面用 @Lazy / ObjectProvider / Setter 注入即可 90% 场景无痛落地;
构造器循环或多例 Bean 只能重构,Spring 的三级缓存只是兜底,不是银弹。

http://www.dtcms.com/a/286829.html

相关文章:

  • go安装使用gin 框架
  • 在Jetson部署AI语音家居助手(二):语音激活+语音转文字
  • RS485转PROFIBUS DP网关写入命令让JRT激光测距传感器开启慢速模式连续测量
  • Angular项目IOS16.1.1设备页面空白问题
  • Windows 环境下递归搜索文件内容包含字符串
  • 亚马逊广告高级玩法:如何通过ASIN广告打击竞品流量?
  • 关于一个引力问题的回答,兼谈AI助学作用
  • 读书笔记:《动手做AI Agent》
  • el-date-picker 如何给出 所选月份的最后一天
  • C++ -- STL-- stack and queue
  • 通付盾即将亮相2025世界人工智能大会丨携多智能体协同平台赋能千行百业
  • 如何写python requests?
  • [Linux]如何設置靜態IP位址?
  • LangChain 源码剖析(七)RunnableBindingBase 深度剖析:给 Runnable“穿衣服“ 的装饰器架构
  • Vuex 基本概念
  • Java HashMap高频面试题深度解析
  • Redis高频面试题:利用I/O多路复用实现高并发
  • 在java后端项目中,controller、dal、service的作用是什么?
  • 从 0 安装 Label Studio:搭建可后台运行的数据标注平台(systemd 实践
  • 微服务项目总结
  • 【c++】中也有floor函数吗?他与JavaScript中的floor有啥区别?
  • 【iOS】消息传递和消息转发
  • Ubuntu系统下快速体验iperf3工具(网络性能测试)
  • CAN通信静默模式的原理与应用
  • 【JAVA】JVM内存泄漏围剿终极指南:Arthas在线诊断 + MAT内存分析完整链路
  • 代码随想录算法训练营第二十四天
  • 中国工业RFID前三品牌
  • 片上网络(NoC)拓扑结构比较
  • LeetCode 88 - Merge Sorted Array 合并有序数组
  • 策略模式+工厂模式(案例实践易懂版)