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;
相关推荐
代码方舟1 小时前
零信任架构实战:基于天远人企关联构建自动化供应链金融网关
运维·人工智能·架构·自动化
EatFan1 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
天远API2 小时前
零信任架构实战:基于天远人企关联构建自动化图谱网关
网络·人工智能·架构·自动化
波力海苔夹心脆6753 小时前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
szxinmai主板定制专家4 小时前
RK3588+FPGA异构架构|高速数据采集+边缘AI落地应用全解析
人工智能·嵌入式硬件·fpga开发·架构·zynq
JavaGuide4 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
李福春4 小时前
降SpringAI阿里第1掌-亢龙有悔-识势选型
人工智能·架构·腾讯云架构师同盟
excel4 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
李游Leo4 小时前
HarmonyOS 7 + ArkUI + RelationalStore 学习笔记:本地数据分层存储与状态持久化架构实践【鸿蒙心迹】
笔记·学习·架构·harmonyos