spring如何解决循环依赖问题

spring如何解决循环依赖问题

1、 什么是循环依赖问题

  • 循环依赖问题就是A->B->A,spring在创建A的时候,发现需要依赖B,因为去创建B实例,发现B又依赖于A,又去创建A,因为形成一个闭环,无法停止下来就可能会导致cpu计算飙升。

  • 解决方法:Spring的三级缓存(3个map)。

    Spring在初始化A时,进行到第(4)步要为属性B注入依赖时,先暂停A的初始化,去创建B的实例,此时生成A bean的工厂放在三级缓存中(标记为“创建中”)。初始化B时,发现B需要注入一个A的依赖(发生了循环依赖),则B可以依次遍历三级缓存,最后在第三极缓存找到了A对象,提前生成A的aop代理,存入二级缓存,同时移除三级缓存,然后A的aop代理的引用注入A,完成B的初始化。(b在初始化过程中已经生成了aop代理——Bean初始化的正常步骤,初始化完成之后,存入了一级缓存)。最后回到A的初始化,最终A也完成初始化,皆大欢喜!

2、三级缓存

  • (1)第一级缓存:singletonObjects,主要存放初始化完成后的单例bean。
  • (2)第二级缓存:earlySingletonObjects,主要存放经过了实例化,但并未初始化的对象。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值