Spring解决循环依赖,非三级缓存可行吗?

2026-05-16 05:400阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3180个文字,预计阅读时间需要13分钟。

Spring解决循环依赖,非三级缓存可行吗?

我们知道,Spring 通过三级缓存来解决循环依赖问题。但问题是,是否真的需要使用三级缓存来解决循环依赖呢?只使用二级缓存是否也可以呢?本文将探讨Spring如何使用三级缓存来解决循环依赖。

我们都知道 Spring 是通过三级缓存来解决循环依赖的,但是解决循环依赖真的需要使用到三级缓冲吗?只使用两级缓存是否可以呢?本篇文章就 Spring 是如何使用三级缓存解决循环依赖作为引子,验证两级缓存是否可以解决循环依赖。

循环依赖

既然要解决循环依赖,那么就要知道循环依赖是什么。如下图所示:

通过上图,我们可以看出:

  • A 依赖于 B
  • B 依赖于 C
  • C 依赖于 A

public class A { private B b; } public class B { private C c; } public class C { private A a; }

这种依赖关系形成了一种闭环,从而造成了循环依赖的局面。

下面是未解决循环依赖的常规步骤:

  • 实例化 A,此时 A 还未完成属性填充和初始化方法(@PostConstruct)的执行。
  • A 对象发现需要注入 B 对象,但是容器中并没有 B 对象(如果对象创建完成并且属性注入完成和执行完初始化方法就会放入容器中)。
  • 实例化 B,此时 B 还未完成属性填充和初始化方法(@PostConstruct)的执行。
  • B 对象发现需要注入 C 对象,但是容器中并没有 C 对象。
阅读全文

本文共计3180个文字,预计阅读时间需要13分钟。

Spring解决循环依赖,非三级缓存可行吗?

我们知道,Spring 通过三级缓存来解决循环依赖问题。但问题是,是否真的需要使用三级缓存来解决循环依赖呢?只使用二级缓存是否也可以呢?本文将探讨Spring如何使用三级缓存来解决循环依赖。

我们都知道 Spring 是通过三级缓存来解决循环依赖的,但是解决循环依赖真的需要使用到三级缓冲吗?只使用两级缓存是否可以呢?本篇文章就 Spring 是如何使用三级缓存解决循环依赖作为引子,验证两级缓存是否可以解决循环依赖。

循环依赖

既然要解决循环依赖,那么就要知道循环依赖是什么。如下图所示:

通过上图,我们可以看出:

  • A 依赖于 B
  • B 依赖于 C
  • C 依赖于 A

public class A { private B b; } public class B { private C c; } public class C { private A a; }

这种依赖关系形成了一种闭环,从而造成了循环依赖的局面。

下面是未解决循环依赖的常规步骤:

  • 实例化 A,此时 A 还未完成属性填充和初始化方法(@PostConstruct)的执行。
  • A 对象发现需要注入 B 对象,但是容器中并没有 B 对象(如果对象创建完成并且属性注入完成和执行完初始化方法就会放入容器中)。
  • 实例化 B,此时 B 还未完成属性填充和初始化方法(@PostConstruct)的执行。
  • B 对象发现需要注入 C 对象,但是容器中并没有 C 对象。
阅读全文