Spring是怎么解决循环依赖的

本文详细阐述了Spring框架如何处理循环依赖,涉及一级、二级和三级缓存的作用,以及创建、属性注入、提前暴露、初始化等步骤,解释了循环依赖报错信息和解决流程图,帮助开发者理解和应对此类问题。

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

首先先解释一下什么叫循环依赖

循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环.比如A依赖于B,B依赖于A

循环依赖在spring中是允许存在的,spring框架依据三级缓存已经解决了大部分的循环依赖

一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象

二级缓存:缓存早期的bean对象(声明周期还没有走完)

三级缓存:缓存的是ObjectFactory,标识对象工厂,用来创建某个对象的

spring通过三级缓存来解决循环依赖的问题,具体解决过程如下:

1.创建对象:当Spring容器创建一个Bean时,会先创建一个空的对象,并将其到"singletonFactories"缓存中.

2.属性注入:spring会将该对象的属性注入到其他依赖的Bean中

3.提前暴露:在属性注入完成后,Spring会将该对象提前暴露给其他的Bean,以便其他的Bean可以引用到该对象.

4.初始化:Spring会调用该对象的初始化方法.

5.缓存对象:当该对象初始化完成后,Spring会将该对象放入到earlySingletonObjects缓存中.

6.循环依赖检测:在创建其他bean时,如果发现有循环依赖的情况,spring会从singletonFactories缓存中获取之前创建的空对象,并将其返回给依赖的bean.

7.属性充值:当循环依赖的bean被返回后,Spring会继续填充bean的属性

8初始化完成:当所有的bean的属性填充完成后,spring会调用这些bean的初始化方法.

通过以上步骤,spring能够解决循环依赖的问题,确保所有Bean都能够正确地创建和初始化

循环依赖问题AI智能回答

循环依赖报错信息

循环依赖解决流程图

循环依赖进一步追问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值