Spring循环依赖问题

本文探讨了Spring中的循环依赖问题,解释了Bean的创建和管理过程,并详细阐述了解决循环依赖的方法,包括为什么Spring使用三级缓存来解决这个问题,而二级缓存无法完全胜任。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习地址:https://www.bilibili.com/video/BV1ET4y1N7Sp?p=2

1、什么是Spring循环依赖?

2、循环依赖怎么解决?

3、Spring中为什么要使用三级缓存来解决循环依赖?二级缓存能不能解决循环依赖问题?

什么是Spring循环依赖

首先了解Bean的创建与管理过程:

结论:获取Bean的时候先从单例池中获取,如果没有则创建并添加到单例池。

获取Bean

找bean工厂,调用两次单例池。第一次通过beanName获取,如果单例池中并没有这个beanName的对象,则第二次会使用工厂模式创建并且添加到单例池中然后返回需要的对象。

加锁是因为在并发的情况下,防止重复创建Bean。

创建Bean

通过getBean(" ")触发。

单例情况下:

多例情况下:

Bean的生命周期(创建过程):getBean->实例化->填充属性->初始化,对应以下步骤:

getBean("a");

createBeanInstance("a");  //实例化

populateBean("a");  //填充属性(成员属性)

initializeBean("a");   //初始化

创建完成之后添加到单例池中:

循环依赖怎么解决?

这是包含一般属性的对象创建过程,如果对象A属性中包含对象B,那么就是以下情况:

看另外一种情况:

半成品池:存储还没有初始化的bean对象

如果仅仅是以上的情况,可以通过二级缓存解决。

Spring中为什么要使用三级缓存来解决循环依赖?二级缓存能不能解决循环依赖问题?

但是还有另外的情况,就是AOP,被代理的对象进行循环引用就要用到三级缓存+提前引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值