循环依赖以及解决方案

脱离spring环境

什么是:

循环依赖就是有两个类,A,B,在创建A的时候,给A里放个B,创建B的时候,给B里放个A,无限调用对方,

解决:

实例化和填充属性分开,先实例化,再填充属性

spring环境下

一级缓存

一实例化对象直接放进单例池。一个单例池已经能够解决循环依赖,但是,在多线程的情况下,会出现其他线程会拿走半成品的情况

解决方法:1半成品加锁,2判断属性是否填充,没有填充属性的半成品不能使用,

二级缓存

会有一个提前暴露池,一个单例池,半成品会放到提前暴露池,,当另一个线程来取时,只会到单例池中取 ,找不到就直接返回,不会用到半成品,在完成填充属性后,将提前暴露池里的半成品删掉,将成品放到单例池中,解决循环依赖,但是二级缓存也有问题,二级缓存注入属性时,没有注入代理,当对象需要切面时,切面就不能注入

最终解决:三级缓存:

三级缓存里会有半成品和一个工厂,在注入之前,会先加工成代理再注入,是将最后几步的创建代理提前进行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值