怎么在网站做营销软文,推广平台app,文章写作网站,阿里云上怎么做网页网站置顶 学习专栏#xff1a;【Java后端面试题】 1.Java面试题—基础知识、面向对象、【容器】、IO 【设计模式】、泛型 异常 反射 注解、快速排序2.Java面试题—并发基础、【同步 互斥】、JUC 并发容器、【线程池】、异步编程、【Lambda表达…置顶 学习专栏【Java后端面试题】 1.Java面试题—基础知识、面向对象、【容器】、IO 【设计模式】、泛型 异常 反射 注解、快速排序2.Java面试题—并发基础、【同步 互斥】、JUC 并发容器、【线程池】、异步编程、【Lambda表达式】、方法引用、Stream流3.Java面试题—JVM基础、【内存管理】、【垃圾回收】 垃圾收集器、JVM 调优4.Java面试题—【Spring】、【Spring Boot】、Spring Cloud、Mybatis-Plus5.Java面试题—【MySQL】、【Redis】、【计算机网络】、Linux、【Nginx】 1.三级缓存 循环依赖
Spring中的 三级缓存 是为了解决 循环依赖 问题而设计的。循环依赖 是指在一个Bean的创建过程中依赖了另一个Bean而这个被依赖的Bean又依赖了第一个Bean形成了依赖循环。
第一级缓存存放已经经历了完整生命周期的Bean对象这些对象可以直接使用。第二级缓存存放早期暴露出来的单例Bean对象。这些对象已经实例化但可能还没有完成属性填充。这个缓存主要用于解决循环依赖问题。第三级缓存存放早期暴露的单例Bean的工厂对象。这个缓存也是用于解决循环依赖问题特别是在AOP的场景下。
2.解决 循环依赖 的 步骤
解决 循环依赖 的 步骤如下 在解决 循环依赖 问题时Spring会首先尝试从 第一级缓存 中获取已经 创建好的Bean对象。 如果没有找到就会去 第二级缓存 中获取早期暴露的单例对象。 如果还是没有找到就会去 第三级缓存 中获取早期暴露的 单例对象的工厂然后通过这个工厂来创建 Bean对象。创建好的Bean对象会被放入 第一级缓存 中以便后续使用。
需要注意的是只有 单例的Bean 才会通过 三级缓存 提前暴露来解决 循环依赖 问题。非单例的Bean每次使用都会从容器中创建新对象所以不会将其放到三级缓存中。
此外为了解决 第二级缓存 中 AOP生成新对象 的问题Spring会提前执行AOP获取增强以后的对象这样依赖的对象就是增强以后的对象了。
总的来说Spring的三级缓存机制是为了解决循环依赖问题而设计的通过提前暴露单例对象和创建对象工厂的方式来避免循环依赖产生的问题。 ------ 感谢观看一键三连 ------