【笔记】Spring的循环依赖

Spring的循环依赖

在这里插入图片描述

在这里插入图片描述
ObjectFactory:函数式接口,可以将lambda表达式作为参数放在方法的实参种,在方法执行的时候,并不会实际的调用当前lambda表达式,只有在调用getObject方法的时候才回去调用lambda表达式
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

为什么spring要用三级缓存来解决循环依赖?

如果我们能保证所有的bean对象都不会被aop代理,那么二级缓存就能解决循环依赖问题,但是在spring中很多的bean都需要被代理。

spring的设计原则是在bean初始化完成才会创建代理对象,如果按照设计,那么就会出现一个问题:注入的对象和最终暴露的对象不是同一个对象,违背了单例的原则,所以需要将代理操作提前

使用二级缓存,可以满足解决循环依赖的问题,那么就意味着所有bean的创建代理的操作都要提前到实例化后初始化之前去创建代理对象,再将代理对象放入到二级缓存中,这次的操作是与设计相悖的;

那么何不在需要的时候再去创建代理对象呢,不需要的时候仍然在初始化后再创建代理对象呢,所以这个时候就引入了三级缓存,在三级缓存中放入ObjectFactory<?>,等需要的时候再去调用ObejctFactory.getObeject方法,该方法只会执行一次,就直接删除三级缓存保证了单例需求

默写
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值