循环依赖解决缩略图
2023-05-10 21:55:05 9 举报
spring循环依赖解析图
作者其他创作
大纲/内容
从缓存中取
构造A对象的bean的过程
需要A
三级缓存
放入缓存
1、扫描类 -->BeanDefinition
需要B
A原始对象
5、BeanPostProcessor:对前面所生成的对象进行加工 也可能进行aop -->生成代理对象
2、b = new B(); //原始对象
B创建完成
1、为什么要区分一级二级缓存?
放入单例池
一级缓存存储的是spring 加工完的单例对象 也被称为单例池,而二级缓存存储的是bean工厂创建的原始对象,此时的对象是没有值得,此时会产生两个对象(发生代理)
4、Aware,init
3、b 对象填充属性 a ------->A 的bean --->构造一个A
二级缓存:临时存储代理对象
这个时候A回继续执行beanpostprocessor,此时A会从二级缓存中拿B放的代理对象
3、三种缓存分别干什么用的?
一级缓存:存储加工完毕的单例对象
2、为什么要有三级缓存?
各级缓存对应功能 实际都是map结构
三级缓存:存储原始对象
将B赋值给A
A:A原始对象
构造B对象的bean的过程
存储 创建原始对象的lambda表达式,如果不存在循环依赖问题,那基本没什么作用
B去创建
需要A对象 从三级缓存中找(如果有代理就生成代理对象并放到二级缓存)
2、a = new A(); //原始对象
3、a 对象填充属性 b ------->B 的bean --->构造一个B
流程梳理
A创建时
0 条评论
下一页