一文搞懂Spring解决循环依赖问题 ✨ 每日积累

简介: 一文搞懂Spring解决循环依赖问题 ✨ 每日积累

辅助图解


1.png

1、spring启动之后,bean相关的定义信息会被loadBeanDefinition通过io等操作加载
 2、加载后的bean定义信息转为Document对象,里面由很多父子节点
 3、通过BeanDefinitionReader读取器读取到spring的container容器中
 4、通过Document对象中的父子节点转化为BeanDefinition
 5、放入beanDefinitionMap,遍历map验证(是否单例、是否延迟加载、是否抽象)
 6、推断构造方法,准备开始进行实例、


循环依赖开始


7、1 首先去单例池中查找,查不到去二级缓存池去找,
 7、2 没有则创建这个对象的objectFactory(半成品对象:利于拓展,程序员可以通过beanPostProcess接口操作objectFactory对象生成自己想要的对象)到二级缓存中。
 7、3 属性注入阶段时发现当前对象A依赖另外一个对象B,此时B对象开始它的生命周期开始直到属性注入,发现自己依赖A对象,
 7、4 在二级缓存中找的时候找到了A的objectFactory对象(半成品)对B对象进行属性注入,
 7、5 完成B对象初始化依赖,将完整B对象放入单例池;
 7、6 A对象属性注入B对象,然后完成A对象的整个初始化,将A对象放入单例池;
 7、7 在A和B对象都放入单例池之后销毁二级缓存中的objectFactory对象。
相关文章
|
1月前
|
人工智能 Java Spring
Spring Boot循环依赖的症状和解决方案
Spring Boot循环依赖的症状和解决方案
|
2天前
|
缓存 Java uml
Spring压轴题:当循环依赖遇上Spring AOP
Spring压轴题:当循环依赖遇上Spring AOP
11 1
|
14天前
|
Java Spring 缓存
Spring Bean循环依赖详解
【6月更文挑战第2天】
22 2
|
22天前
|
设计模式 Java 开发者
解密Spring:优雅解决依赖循环的神兵利器
解密Spring:优雅解决依赖循环的神兵利器
186 57
|
1月前
|
缓存 Java 开发工具
【spring】如何解决循环依赖
【spring】如何解决循环依赖
135 56
|
1月前
|
存储 缓存 Java
【Spring系列笔记】依赖注入,循环依赖以及三级缓存
依赖注入: 是指通过外部配置,将依赖关系注入到对象中。依赖注入有四种主要方式:构造器注入、setter方法注入、接口注入以及注解注入。其中注解注入在开发中最为常见,因为其使用便捷以及可维护性强;构造器注入为官方推荐,可注入不可变对象以及解决循环依赖问题。本文基于依赖注入方式引出循环依赖以及三层缓存的底层原理,以及代码的实现方式。
33 0
|
1月前
|
存储 缓存 Java
【spring】06 循环依赖的分析与解决
【spring】06 循环依赖的分析与解决
13 1
|
存储 缓存 Java
Spring 动态代理时是如何解决循环依赖的?为什么要使用三级缓存?
在研究 『 Spring 是如何解决循环依赖的 』 的时候,了解到 Spring 是借助三级缓存来解决循环依赖的。
419 0
|
9月前
|
存储 缓存 Java
Spring为何需要三级缓存解决循环依赖,而不是二级缓存?
今天给大家分享一道大厂面试真题,Spring为何需要三级缓存解决循环依赖,而不是二级缓存?我一共分为五个部分来给大家介绍: 1、什么是循环依赖? 循环依赖就是指循环引用,是两个或多个Bean相互之间的持有对方的引用。在代码中,如果将两个或多个Bean互相之间持有对方的引用,因为Spring中加入了依赖注入机制,也就是自动给属性赋值。Spring给属性赋值时,将会导致死循环。那么,哪些情况会出现循环依赖呢?
161 0
|
10月前
|
缓存 Java Spring
最通俗的方式理解Spring循环依赖三级缓存
有位粉丝找我,说要耽误我5分钟时间,想让我帮助它理解一下Spring循环依赖的三级缓存,绕晕了一个星期,没有想明白。我想今天,用最通俗易懂的方式给大家重新梳理一下,保证让你听懂了。
85 0