Spring---循环依赖探讨

✅Spring 循环依赖细节

在 Spring 中,若创建 Bean 发生解决循环依赖会通过三级缓存解决。

  1. singletonObjects(一级缓存):存放 完整 的 Bean 对象;
  2. earlysingletonObjects(二级缓存):存放 Bean 的 早期(early)对象;
  3. singletonFactories(三级缓存):存放 Bean 的 工厂(Factory)对象;

✅Spring 循环依赖导致启动报错

我们应用的 pay 这个模块,在启动时候会报错。报错信息提示如下:

提示是有一个循环依赖的问题,即 PayApplicationService -> PayChannelServiceFactory -> MockPayChannelService -> PayApplicationService.

Spring不是引入了三级缓存,解决了循环依赖的问题吗?那为啥启动还报错呢?

Spring 2.6 开始,默认已经不开启对循环依赖的支持了

从 Spring Framework 5.3 开始,Spring 默认禁用了对循环依赖的支持,而在 Spring 2.6 中,这一行为得到了进一步的明确和强化

如果想要开启对循环依赖的支持,需要在配置文件中加入

java 复制代码
spring.main.allow-circular-references=true

或者,如果不想加配置的话,也可以用@Lazy 注解,在@Autowired 地方增加即可:

java 复制代码
@Autowired
@Lazy
private PayChannelServiceFactory payChannelServiceFactory;
相关推荐
好家伙VCC几秒前
# 发散创新:用 Rust 实现高性能事件驱动架构的实践与优化 在现代软件系统中,**事件驱动编程模型**已经成为构
java·开发语言·python·架构·rust
bcbnb3 分钟前
基于Mach-O文件的动态库与静态库归属方案及API扫描实践
后端·ios
光辉GuangHui5 分钟前
SDD 实践:OpenSpec + Superpowers 整合创建自定义工作流
前端·后端
程序员Ctrl喵6 分钟前
状态管理与响应式编程 —— 驾驭复杂应用的“灵魂工程”
开发语言·flutter·ui·架构
金銀銅鐵7 分钟前
[Java] 如何自动生成简单的 PlantUML 类图
java·后端
小江的记录本10 分钟前
【Spring Boot】Spring Boot 全体系知识结构化拆解(附 Spring Boot 高频面试八股文精简版)
java·spring boot·后端·spring·面试·tomcat·mybatis
ETA811 分钟前
流式背后的状态机:深入解析 AI Agent 的核心循环机制
后端·源码
Thomas.Sir14 分钟前
从底层源码深入剖析 MyBatis 工作原理
java·架构·mybatis
聚铭网络16 分钟前
聚铭网络参编!T/CCIA 005-2026《网络安全运营大模型参考架构》正式发布
网络·web安全·架构
在屏幕前出油16 分钟前
04. FastAPI——响应类型
开发语言·后端·python·pycharm·fastapi