图解Spring三级缓存的工作流程

图解Spring三级缓存的工作流程_第1张图片

一级缓存:保存了完整的Bean实例,可以直接使用

二级缓存:保存了实例化以后还没有设置属性值的Bean实例,也就是一个空的对象,没有做依赖注入

三级缓存 :存放Bean工厂,它用来生成原始Bean对象并且放到二级缓存里面

三级缓存是为了解决循环依赖注入的问题,而且是单例的情况,其他情况是用不到三级缓存的 

1. 先实例化目标Bean A,包装成一个ObjectFactory对象放到三级缓存

2. 再实例化目标Bean A 的成员Bean B, 放到三级缓存

3. Bean B 开始依赖注入,在三级缓存里面去找Bean A,完成了 Bean B下面成员Bean A的依赖注入

3. 再从三级缓存找到目标Bean移动到二级缓存,再从三级缓存中移除

4. 把不完整(只初始化了,属性并没有填充) 目标Bean注入到目标Bean的子Bean中(我艹,好绕)

5. Bean B 属性填充执行完以后初始化后放入一级缓存

6. 这个时候 Bean A 就可以拿到 Bean B的实例完成注入

7. 目标 Bean A 完成了属性填充,放入一级缓存

三级缓存核心思想就是把Bean的实例化和Bean中的属性依赖注入这两个过程分离出来

Spring 框架只能解决单例下的循环依赖注入,多例的情况下需要手动去解决

图解Spring三级缓存的工作流程_第2张图片

你可能感兴趣的:(spring,缓存,java)