什么是循环依赖
两个不同的实体类,却拥有有着对方对象作为属性。
``
- A a = new A();
- a.b = new B(); a.c = new C();
- => B b = new B();
- b.a = new A()
- => C c = new C();
- C.a = new A()
``
代码从上到下简单执行是没有问题的,1步与4步、2步与3步 会生成不同的对象。彼此之间没有直接联系。
但 spring 创建对象时会存在问题。spring的单例模式会致使 1、2、3、4 步骤中所有的A对象相同,所有的B相同
循环依赖-创建对象的生命周期
多个对象相互依赖的情况下的脑图:https://note.youdao.com/s/b4YzOUUX
什么是单例池
单例池,就是spring三级缓存中的第一级缓存。保存创建完成且填充完成的对象。打破循环。
第三级缓存的作用
临时缓存器,存储的对象都是刚创建的,对象的属性并未开始填充。每个对象在创建之初都会存入到三级缓存中,在存入到第一级缓存后,删除数据。
主要作用:通过存储中lambad表达式,获取到对象,存储到 第二级缓存中
第二级缓存的作用
AOP,在spring factory中会创建一个代理对象。
第二缓存的主要意义在于,应对多个相互依赖的情况下,能够获取到相同的代理对象。
当然,第二级缓存也会存储普通对象,这在于是否使用 AOP。