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;
相关推荐
盛华科技12 分钟前
QT实战课程_监控系统
后端
用户2037355498114 分钟前
黑马博学谷-Java并发编程原理精讲
后端
Java水解14 分钟前
MySQL 表约束实战指南:从概念到落地,守护数据完整性
后端·mysql
盛华科技17 分钟前
YOLOv5怎么做改进?大佬手把手带你在YOLOv5中添加4种注意力机制,训练自己的数据集!
后端
程序员蜗牛1 小时前
微信登录之OpenID与UnionID获取全流程解析
后端
SimonKing2 小时前
SpringBoot多模板引擎整合难题?一篇搞定JSP、Freemarker与Thymeleaf!
java·后端·程序员
rannn_1112 小时前
【LeetCode hot100|Week4】链表
后端·算法·leetcode·链表
SYC_MORE2 小时前
多线程环境下处理Flask上下文问题的文档
后端·python·flask
Craaaayon2 小时前
【数据结构】二叉树-图解深度优先搜索(递归法、迭代法)
java·数据结构·后端·算法·leetcode·深度优先
ChinaRainbowSea2 小时前
5. Prompt 提示词
java·人工智能·后端·spring·prompt·ai编程