Spring循环依赖的解决

本文深入探讨了Spring框架中Bean的生命周期,从实例化、属性填充、Aware回调到初始化的过程。同时,详细解释了BeanFactoryPostProcessor和BeanPostProcessor在不同阶段的作用,特别是它们如何影响Bean的创建和AOP代理。此外,文章还阐述了Spring的三级缓存机制,特别是针对循环依赖的处理,以及在AOP操作中的应用。通过对这些核心概念的理解,有助于开发者更好地掌握Spring框架的内部工作原理。

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

bean实例化 ----> 填充属性 ---->Aware回调方法 ----> 初始化 ---->

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

在这里插入图片描述

beanFactoryPostProcessor 是在beanDefinition后执行的,可以用于对benaDefiniton里面的属性进行修改

Spring 先去扫描类,然后根据这些类上面的注解,生成beanDefinition,然后将其放到beanFactory中有个Map属性中去,叫beanDefinitonMap

在这里插入图片描述
BeanFactory扫描完之后,就组建完成了,但是里面存的只是beanDefiniton,还不是最终的bean对象。

在这里插入图片描述

beanFactoryPostProcessor 是当beanFactory组建完成之后,就可以执行了,beanFactory组建完成的标志就是Spring把所有的类都扫描到,并转为beanDefinition存入到beanFactory的成员属性beanDefinitonMap中,然后beanFactory.getbean()方法执行时,就是去取这里面的definition,然后将它转为bean,存入到singtonMap中

beanPostProcessor是在实例完成之后,就可以对这个实例进行操作了,也就是new 这个类之后,就可以用这个处理器进行相应的操作了

这是注入属性之前的操作,先向earlyProxyReference里面put这个bean(原始对象),这样,之后真正进行到AOP这个操作的时候,就可以判断一下这个Map里面有没有值,如果有值,就说明已经生成过代理对象了,这样真正执行AOP的这个步骤,就不需要执行AOP了
在这里插入图片描述

真正执行AOP的操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为什么需要三级缓存

第三级缓存 存的是一个lambda表达式,而这个lambda表达式只有在发生循环依赖的情况下,才会去执行

如果没有发生循环依赖,第三级缓存也会存这个lambda表达式,只不过不会去执行这个lambda表达式,也就不会放到二级缓存里面去。

二级缓存的作用:是真正执行AOP这个操作的时候,去这个二级缓存里面去查看有没有值,如果有值,则不会发生AOP(循环依赖的情况),如果没有值,则发生AOP(没有发生循环依赖)在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值