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;
相关推荐
大志说编程几秒前
LangChain框架入门16:智能客服系统RAG应用实战
后端·langchain·aigc
我星期八休息6 分钟前
Agent开发进阶路线:从基础响应到自主决策的架构演进
架构
沸腾_罗强15 分钟前
Redis内存爆了
后端
天天摸鱼的java工程师21 分钟前
Snowflake 雪花算法优缺点(Java老司机实战总结)
java·后端·面试
海梨花1 小时前
【从零开始学习Redis】项目实战-黑马点评D2
java·数据库·redis·后端·缓存
bug菌1 小时前
零基础也能做出AI应用?Trae是如何打破编程"高墙"的?
后端·ai编程·trae
Java技术小馆1 小时前
重构 Controller 的 7 个黄金法则
java·后端·面试
用户4099322502121 小时前
容器化部署FastAPI应用:如何让你的任务系统代码在云端跳舞?
后端·ai编程·trae
Java水解1 小时前
MySQL 亿级数据表平滑分表实践:基于时间分片的架构演进
后端·mysql