spring循环依赖1
2023-07-17 11:47:25 0 举报
通过图文结合详细描述spring循环依赖产生的过程,以及spring源码是如何解决循环依赖的方法
作者其他创作
大纲/内容
三级缓存主要作用:在AOP+循环依赖情况下,生成需要的Bean代理对象
一级缓存
========================================================================================================================
三级缓存
循环依赖产生
三级缓存 1、singletonObjects (单例池) 2、earlySingletonObjects 3、singletonFactories
二级缓存
class AService {@AutoWireprivate BService ;}
AService Bean的创建过程:0.creategingSet<\"Service\"> 该set主要存储正要实例化、未属性填充的单例Bean。1.实例化------>AService2.填充bService的Bean-----获取实例B----->单例池----无---->creategingSet------>循环依赖------>earlySingletonObjects--------->存储AService已例化未代理未属性赋值单例 BService Bean的创建过程: 2.1、实例化--->BService 2.2、填充cService的Bean-----获取实例C---->单例池------>无----->creategingSet------>循环依赖-------->earlySingletonObjects--------->存储BService已例化未代理未属性赋值单例 CService Bean的创建过程: 2.1.1、实例化--->BService 2.1.2、填充aService的Bean---获取实例A---->单例池---无--->earlySingletonObjects--有--->存储CService已例化未代理未属性赋值单例--->解决循环依赖 2.1.3、填充其他属性 2.1.4、其他步骤(初始化) 2.1.5、加入单例池 2.3、填充其他属性 2.4、其他步骤(初始化) 2.5、加入单例池 一、CService创建完成3、填充其他属性4、其他步骤(初始化)5、加入单例池 二、BService创建完成 三、AService创建完成
class CService {@AutoWireprivate AService ;}
有AOP,有循环依赖则在三级缓存中生成代理对象并加入二级缓存、单例池
AService Bean的创建过程:1.实例化------>AService2、填充bService的Bean----获取实例B------>单例池-----无--->创建BService BService Bean的创建过程: 2.1、实例化--->BService 2.2、填充cService的Bean-----获取实例C------->单例池-----无----->创建CService CService Bean的创建过程: 2.1.1、实例化--->BService 2.1.2、填充aService的Bean------获取实例A----->单例池-----无----->创建AService----->循环依赖 2.1.3、填充其他属性 2.1.4、其他步骤(AOP) 2.1.5、加入单例池 2.3、填充其他属性 2.4、其他步骤(AOP) 2.5、加入单例池3、填充其他属性4、其他步骤(AOP)5、加入单例池
AService Bean的创建过程: 0.creategingSet<\"Service\"> 该set主要存储正要实例化、未属性填充的单例Bean。 1.实例化------>AService普通对象----->singletonFactories<\"beanName\
Spring的循环依赖
class BService {@AutoWireprivate CService ;}
有AOP,无循环依赖则在初始化后生成代理对象加入单例池无AOP,则将原始单例对象加入单例池
收藏
0 条评论
下一页