Spring循环依赖问题

2022-09-03  本文已影响0人  cooze

什么是循环依赖

循环依赖就是两个对象之间存在相互依赖的关系;

Spring是如何解决循环依赖的

Spring使用三级缓存来解决循环依赖

三级缓存如何解决循环依赖的

三级缓存是通过三个HashMap来实现的。

三级缓存解决循环依赖过程

循环依赖

Spring 为什么要引入第三级缓存?

Spring 的设计原则是尽可能保证普通对象创建完成之后,再生成其 AOP 代理(尽可能延迟代理对象的生成)所以 Spring 用了第三级缓存,既维持了设计原则,又处理了循环依赖。

只用二级缓存能不能解决循环依赖?

可以,但是在AOP对象发生循环依赖的时候会存在一些问题。
一级和二级缓存
如果只用一级缓存和二级缓存时,在给Bean实例注入依赖时只能注入原始对象,而非提前创建的代理对象。因为属性赋值阶段完成之后,在Bean初始化阶段才会生成代理对象。
一级和三级缓存
如果只用一级缓存和三级缓存时,在每次获取依赖Bean实例的时候,都会通过ObjectFactory创建新的实例,违背Spring设计原则。

上一篇 下一篇

猜你喜欢

热点阅读