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 分钟前
Rust 异步编程实践:从 Tokio 基础到阻塞任务处理模式
后端·rust·github
GO兔1 分钟前
开篇:GORM入门——Go语言的ORM王者
开发语言·后端·golang·go
Sincerelyplz7 分钟前
【Temproal】快速了解Temproal的核心概念以及使用
笔记·后端·开源
爱上语文8 分钟前
Redis基础(6):SpringDataRedis
数据库·redis·后端
guojl8 分钟前
深度解决大文件上传难题
架构
Lemon程序馆9 分钟前
速通 GO 垃圾回收机制
后端·go
Aurora_NeAr13 分钟前
Spark SQL架构及高级用法
大数据·后端·spark
杰尼橙子13 分钟前
DPDK BPF:将eBPF虚拟机的灵活性带入到了DPDK的高性能用户态
后端·性能优化
DemonAvenger16 分钟前
Go语言中的TCP编程:基础实现与最佳实践
网络协议·架构·go
代码老y33 分钟前
Spring Boot + 本地部署大模型实现:优化与性能提升
java·spring boot·后端