springbootBean三级缓存

简介: 个人理解

首先三级缓存中

一级缓存保存的是成熟期的bean对象

二级缓存保存的是已经实例化好但是还没完成初始化的

三级缓存存储的是ObjiceFactory 也就是每个bean对象都有自己的ObjectFactory去创建bean

如果没有用到动态代理的话

那么一二级缓存就已经可以解决循环引用了

如果是bean对象有用到动态代理的话

那么这个时候就需要用到三级缓存了

为什么呢

因为动态代理的话每一次访问都会创建新的对象

新的对象地址肯定不同

所以这个时候如果我们直接去访问的话 那么就死循环了

所以三级缓存实际上维护的是一个map集合

map集合里面存储的是动态代理的对象 我们拿到就可以直接用了 这个时候就不会死循环了

总结 如果bean对象是需要动态代理的话 那么就需要用到三级缓存 如果不需要的话 那么其实一二级缓存就可以解决循环引用的问题了

相关文章
|
缓存 Java Spring
Spring框架(四) 三级缓存与循环依赖
首先我们需要明白什么是循环依赖 , 打个比方 , 就是说A对象在创建的过程中 , 需要依赖注入B对象 , 但是B对象没有 , 就需要去创建 , 而在创建B对象的过程中又需要注入A对象 , A对象此时还在创建中,所以就构成了一个死循环 , A,B相互依赖 这样的关系被成为循环依赖(当然 , 可能还会有其他的情况),下面我们就来看看Spring是如何让解决循环依赖的
159 0
|
XML 安全 Java
Spring框架中的单例bean是线程安全的吗?阿里一面
在 Spring 框架中,Bean 是指由 Spring IoC(Inversion of Control)容器管理的组件或对象。Bean 是 Spring 中最基本的构建块,它们由 Spring 容器实例化、组装和管理。
109 0
|
6月前
|
安全 Java Spring
Spring框架中的单例Bean是线程安全的吗?
Spring框架中的单例Bean是线程安全的吗?
83 1
|
存储 缓存 Java
Spring 动态代理时是如何解决循环依赖的?为什么要使用三级缓存?
在研究 『 Spring 是如何解决循环依赖的 』 的时候,了解到 Spring 是借助三级缓存来解决循环依赖的。
475 0
|
5月前
|
缓存 Java Spring
|
6月前
|
存储 缓存 Java
spring的三级缓存,以及循环依赖的形成和解决(详细)
spring的三级缓存,以及循环依赖的形成和解决(详细)
887 0
|
存储 缓存 Java
Spring为何需要三级缓存解决循环依赖,而不是二级缓存?
今天给大家分享一道大厂面试真题,Spring为何需要三级缓存解决循环依赖,而不是二级缓存?我一共分为五个部分来给大家介绍: 1、什么是循环依赖? 循环依赖就是指循环引用,是两个或多个Bean相互之间的持有对方的引用。在代码中,如果将两个或多个Bean互相之间持有对方的引用,因为Spring中加入了依赖注入机制,也就是自动给属性赋值。Spring给属性赋值时,将会导致死循环。那么,哪些情况会出现循环依赖呢?
198 0
|
存储 缓存 内存技术
|
安全 Java 开发者
Spring框架中的单例bean是线程安全的吗?
Spring框架中的单例bean是线程安全的吗?
133 0
|
Java 容器 Spring
七.Spring源码剖析-Bean的实例化-属性注入
喜欢我的文章的话就给个好评吧,你的肯定是我坚持写作最大的动力,来吧兄弟们,给我一点动力 这一章节我们来讨论创建Bean过程中的属性注入,在Spring的IOC容器启动过程中,会把定义的Bean封装成BeanDefinition注册到一个ConcurrentHashMap中,Bean注册完成后,就会对单利的且lazy-init=false 的Bean进行实例化。创建Bean的代码在 AbstractAutowireCapableBeanFactory#doCreateBean 中,当Bean创建成功之后,会调用AbstractAutowireCapableBeanFactory#populat