【spring】spring如何解决bean的循环依赖
创始人
2025-05-29 05:07:11

目录

      • 一、如何解决循环依赖
      • 二、二级缓存能不能解决循环依赖
      • 三、多例bean的循环依赖spring是否解决
      • 四、构造参数的循环依赖spring是否解决

一、如何解决循环依赖

  • 1.通过三级缓存(map)
  • 2.一级缓存:存储完整的Bean,(关键是一定要有一个缓存保存它的早期对象作为死循环的出口)
  • 3.二级缓存:避免多重循环依赖的情况,重复创建动态代理
  • 4. 三级缓存:缓存的是函数接口,通过lambda表达式把方法传进去(把bean的实例和bean的名字传进去)(可能会有aop创建),但不会立即调用(如果在实例化后立即调用,所有aop不管bean是否循环依赖都会在实例化后创建proxy,但spring希望正常bean遵循生命周期,在初始化创建动态代理),第二次getBean的时候才会去调用三级缓存(实现了aop才会创建动态代理,没有实现则返回bean的实例),放入二级缓存(避免被多个依赖而重复创建),并从三级缓存中删除

二、二级缓存能不能解决循环依赖

  • 1.如果只是死循环的问题,一级缓存就可以解决,但无法避免在并发下获取不完整的bean
  • 2.二级缓存也可以解决循环依赖,但如果出现重复循环依赖,会多次创建aop的动态代理

三、多例bean的循环依赖spring是否解决

  • 1.多例bean不会使用到缓存进行存储,因为多例bean每次使用都需要重新创建
  • 2.不缓存早期的对象就无法解决循环依赖

四、构造参数的循环依赖spring是否解决

  • 1.构造函数的循环依赖没有解决
  • 2.可以人工通过@Lazy延迟加载解决,不会立即创建依赖的bean,而是等到用到时才通过动态代理进行创建

相关内容

热门资讯

年内第二波!北交所单日受理17... 新京报贝壳财经讯(记者黄鑫宇)北交所单日IPO受理再现热潮。2025年12月30日,北交所一次性受理...
小米雷军登上央视重磅纪录片 最近处于舆论风口浪尖之上的小米雷军,登上了央视重磅纪录片,而且是唯一的民营企业家。112月27日,央...
林俊杰女友被扒了!父亲涉经济案... 44岁林俊杰官宣小20多岁女友七七引发全网热议,女友七七过往经历被扒了个底朝天,其中社媒发布的大量露...
科幻作家陈楸帆:在人机共生的前... 人类要刻意去训练认知、思考和表达等“精神肌肉”,来抵抗智能时代的自然“退化”。文|《中国企业家》记者...
盐湖股份:拟以46.05亿元现... 新京报贝壳财经讯 12月30日,盐湖股份公告,公司拟以支付现金方式购买控股股东中国盐湖持有的五矿盐湖...