String aop执行顺序和spring循环依赖

spring 4
正常执行:@Before @After @AfterReturning(正常返回)
异常执行:@Before @After @AfterThrowing(方法异常)
spring 5
正常执行:@Before @AfterReturning(正常返回) @After
异常执行:@Before @AfterThrowing(方法异常)  @After
 

spring 循环依赖:多个bean之间相互依赖,形成了一个闭环
构造器方式注入解决不了循环依赖问题,set方式可以解决
默认的单例(singleton)的场景是支持循环依赖的,不报错
原型(prototype)的场景是不支持循环依赖的。会报错
spring内部通过3级缓存来解决循环依赖DefaultSingletonBeanRegistry

第--级缓存(也叫单例池)singletonObjects:存放已经经历了完整生命周期的Bean对象
第二级缓存: earlysingletonObjects, 存放早期暴露出米的Bean对象,Bean 的生命周期未结束(属性还未填充完  (实例化了但是未初始化的bean),保证单例
第三级缓存: Map<String, ObjectFactory<?>> singletonFactories,存放的是一个lamdba表达式,在这个表达式会判断bean是否需要aop,需要aop的话就执行然后生成一个代理对象返回,不需要的话就直接返回普通对象。(存放的是一个工厂对象)

1 A创建过程中需要B,于是A将自己放到3级缓里面,去实例化B 
2 B实例化的时候发现需要A.于是B先查一级缓存,没有,再查二 级缓存,还是没有,再查三级缓存,找到了A  然后把三级缓存里面的这个A放到二级缓存里面,并删除三级缓存里面的A  
3 B顺利初始化完求,将自己放到一级缓存里面(此时B里面的A依然是创建中状态) 
然后回来接着创建A. 此时B已经创建结束,直接从一级缓存里面拿到B,然后完成创建,并将A自己放到一级缓存里面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值