“Spring 循环依赖”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
第27行: 第27行:
  
 
=== 三级缓存结构 ===
 
=== 三级缓存结构 ===
第一级缓存:保存已经完成初始化的对象
 
  
第二季缓存:保存已经完成实例化但还没有完成初始化的对象
+
==== 一级缓存 ====
 +
保存已经完成初始化的对象
  
第三层缓存:保存对象工厂,这里存储的对象工厂用于返回或创建单例的对象,而且会判断这个 bean 是否需要 AOP,如果需要 AOP,则返回这个 bean 的代理对象
+
==== 第二季缓存 ====
 +
保存已经完成实例化但还没有完成初始化的对象
 +
 
 +
==== 第三层缓存 ====
 +
保存对象工厂,这里存储的对象工厂用于返回或创建单例的对象,而且会判断这个 bean 是否需要 AOP,如果需要 AOP,则返回这个 bean 的代理对象

2024年7月15日 (一) 02:44的版本

什么是循环依赖

public class A {
    private B b;
    
    public void setB(B b){
        this.b = b;
    }
}
public class B {
    private A a;

    public void setA(A a){
        this.a = a;
    }
}

首先

在实际开发中应该尽量避免循环依赖

实例化和初始化

实例化是:A a = new A(); 的过程

初始化是:在实例化后调用 a.setB(); 的过程

三级缓存结构

一级缓存

保存已经完成初始化的对象

第二季缓存

保存已经完成实例化但还没有完成初始化的对象

第三层缓存

保存对象工厂,这里存储的对象工厂用于返回或创建单例的对象,而且会判断这个 bean 是否需要 AOP,如果需要 AOP,则返回这个 bean 的代理对象