栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring 三级缓存

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring 三级缓存

一.简介

在上文提到spring如何解决jvm循环依赖问题,本文详细介绍spring如何用三级缓存解决循环依赖问题

二.循环依赖的问题解决关键点

对象的本质就是在堆区分配内存空间,并用引用进行强关联,而在类的实例化过程中,需要对类成员进行初始化,循环依赖的产生就是在对类的成员变量初始化过程中无法对成员对象进行初始化。

如果我可以在类的成员对象不进行初始化而只是申请内存空间并关联引用,或者直接将引用赋值Null,在类的初始化结束后,再对其成员对象进行赋值

这样,我们就可以解决循环依赖问题

三.解决核心方式

spring解决循环依赖主要运用到反射和代理模式的方式

1.首先通过反射机制创建A对象(也就是为A对象分配内存空间)

2.将A对象的工厂bean,其实就是A对象的对象信息,类似于java.lang.class类放入第三级缓存

3.对beanA进行属性注入,也就是对成员对象B进行属性注入

4.通过反射创建B对象

5.将B对象的工厂bean,其实就是B对象的对象信息,类似于java.lang.class类放入第三级缓存

6.对beanB进行竖形注入,也就是对成员对象A进行属性注入

7.这个时候会先再1级缓存中查找是否有Abean,如果没有会去三级查找是否有A的工厂bean,如果有,则根据工厂bean创建A的代理对象,将代理对象填充到beanB的属性中,完成beanB的创建

8.将beanB放入二级缓存

9.将beanB注入beanA的属性中,完成beanA的初始化,并将beanA放入二级缓存,并替换beanB的成员beanA

四.为什么是三级

维持程序设计的职责单一性

我们自然可以用一级缓存完成整个流程,但会导致再一级缓存中存储的数据杂乱,既有完整对象,又有工厂类对象,半成品对象,对于不同类型的资源调用十分混乱

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992943.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号