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;
相关推荐
uhakadotcom16 分钟前
JDK 24新特性解读:提升性能、安全性和开发效率
后端·面试·github
盖世英雄酱5813639 分钟前
设计模式在Springboot都用在哪些地方呢
java·后端
逸风尊者42 分钟前
开发易忽视的问题:内存溢出/泄漏案例
java·后端·面试
Emma歌小白1 小时前
在 Windows/Mac/Linux 上安装 Java(JDK)
java·后端
涡能增压发动积1 小时前
SpringAI-MCP技术初探
人工智能·后端·架构
thePLJ1 小时前
SpringBoot-已添加并下载的依赖,reload和mvn clean 后还是提示找不到jar包问题
java·spring boot·后端
余华余华1 小时前
输入输出 数组 冒泡排序举例
java·后端
俞嫦曦2 小时前
R语言的回归测试
开发语言·后端·golang
JalenYan2 小时前
Ruby on Rails 中的 Delegated Types(委托类型)
后端·ruby on rails·ruby
hxung2 小时前
spring bean的生命周期和循环依赖
java·后端·spring