Spring-循环依赖

什么是循环依赖

两个不同的实体类,却拥有有着对方对象作为属性。
``

  1. A a = new A();
  2. a.b = new B(); a.c = new C();
  3. => B b = new B();
  4. b.a = new A()
  5. => C c = new C();
  6. C.a = new A()
    ``
    代码从上到下简单执行是没有问题的,1步与4步、2步与3步 会生成不同的对象。彼此之间没有直接联系。
    但 spring 创建对象时会存在问题。spring的单例模式会致使 1、2、3、4 步骤中所有的A对象相同,所有的B相同

循环依赖-创建对象的生命周期

多个对象相互依赖的情况下的脑图:https://note.youdao.com/s/b4YzOUUX
image

什么是单例池

单例池,就是spring三级缓存中的第一级缓存。保存创建完成且填充完成的对象。打破循环。

第三级缓存的作用

临时缓存器,存储的对象都是刚创建的,对象的属性并未开始填充。每个对象在创建之初都会存入到三级缓存中,在存入到第一级缓存后,删除数据。
主要作用:通过存储中lambad表达式,获取到对象,存储到 第二级缓存中

第二级缓存的作用

AOP,在spring factory中会创建一个代理对象。
第二缓存的主要意义在于,应对多个相互依赖的情况下,能够获取到相同的代理对象。
当然,第二级缓存也会存储普通对象,这在于是否使用 AOP。

posted @ 2023-01-12 19:35  之士咖啡  阅读(22)  评论(0编辑  收藏  举报