2021-11-03

补11月2号学习

循环依赖

出现原因:

image.png

如果两个bean对象你中有我,我中有你,就会在创建bean的时候无线套娃 创建a---实例化a---属性b赋值---创建b---实例化b---给属性a赋值---创建a---实例化a…………

解决方法:(spring会解决)使用三级缓存

image.png

基本思路:打破循环,本来规则是实例化对象,属性赋值后放入容器,现在实例化之后先放半成品到容器中


image.png

大概步骤:

创建a---从缓存中查找(没有)---实例化a---放入三级缓存(放入的是一个lambda表达式,表达式中包含了a的信息,因为这时候a还没创建完成,容器中不会有a)---给属性b赋值---从容器中中查找(没有b)---

创建b---从缓存中查找(没有)---实例化b---放入三级缓存(放入的是一个lambda表达式,表达式中包含了b的信息,因为这时候b还没创建完成,容器中不会有b)---给属性a赋值---从缓存中查找(没有a)---

创建a---从缓存中查找(三级缓存中有a)---执行lambda---获取半成品a(a:属性b=null)---放入二级缓存,删除三级缓存中的a---给b的属性a赋值成功(b:属性a:b=null)---b放入一级缓存(成品b放入放入容器中),删除三级缓存中的b---

b创建完成,给对象a的b属性赋值(a:属性b=b)---

a创建完成---放入一级缓存,删除二级缓存中的a

此时一级缓存中同时存在了完整的 a b对象且互相引用,创建完成


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容