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;
相关推荐
小唐同学爱学习4 小时前
短链接修改之写锁
spring boot·redis·后端·mysql
ADRU4 小时前
Dify API 数据库连接与 Session 管理架构调研
数据库·架构
lanbing4 小时前
在Mac OS系统中安装Go语言环境教程
开发语言·后端·golang
生活很暖很治愈4 小时前
Linux基础指令——【2】
linux·服务器·后端·ubuntu
无心水4 小时前
17、Go协程通关秘籍:主协程等待+多协程顺序执行实战解析
开发语言·前端·后端·算法·golang·go·2025博客之星评选投票
珠海西格电力5 小时前
零碳园区如何实现能源互联
大数据·人工智能·物联网·架构·能源
哪里不会点哪里.5 小时前
Spring 中常用注解详解
java·后端·spring
码界奇点5 小时前
深入解析MySQL9主从复制架构详解从原理到实战优化
数据库·sql·架构·可用性测试
zbguolei5 小时前
Springboot上传文件与物理删除
java·spring boot·后端