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。


__EOF__

本文作者之士咖啡
本文链接https://www.cnblogs.com/zz-1q/p/17007500.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   之士咖啡  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示