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;
相关推荐
贫民窟的勇敢爷们11 分钟前
Kimi K2.6:面向生产级智能体的万亿参数 MoE 架构解析
架构
生成论实验室28 分钟前
《事件关系阴阳博弈动力学:识势应势之道》第十篇:识势应势——从认知到行动的完整闭环
人工智能·算法·架构·创业创新·安全架构
wangruofeng34 分钟前
Rust 深度调研:从 Linux 内核到 Cloudflare,为什么最硬核的项目都在用 Rust?
架构·rust
IT邦德38 分钟前
26ai OGG 微服务高可用部署及切换
微服务·云原生·架构
ting94520009 小时前
Tornado 全栈技术深度指南:从原理到实战
人工智能·python·架构·tornado
小码哥_常10 小时前
Spring Boot:别再重复造轮子,这些内置功能香麻了
后端
皮皮林55111 小时前
OpenFeign 首次调用卡 3 秒?八年老开发扒透 5 个坑,实战优化到 100ms!
后端
千寻girling12 小时前
《 Git 详细教程 》
前端·后端·面试
0xDevNull13 小时前
Linux 中 Nginx 代理 Redis 的详细教程
redis·后端
GetcharZp14 小时前
告别 Nginx 手动配置!这款 Go 语言开发的云原生网关,才是容器化时代的真香神器!
后端