Bean的生命周期
Aservicece:
1、calss — beanDefinition
2、new Aservicece() 通过反射或者工厂去实例话一个对象,我们称为原始对象 // 原始对象—Aop–代理对象—放入到我们的Map中去
3、属性填充—填充Bservice bservice属性----->从单例池中找到bservice对应那个bean的对象—不能找到—>从Map中去找—创建Bservice
4、初始化
5、初始化后 执行BeanPostProcessor,进行Aop
Bservicece:
1、calss — beanDefinition
2、new Aservicece() 通过反射或者工厂去实例话一个对象,我们称为原始对象
3、属性填充—填充Aservice aservice属性
4、初始化
5、初始化后 执行BeanPostProcessor,进行Aop
真正的循环依赖:
当Aservice在创建的时候依赖Bservices && Bservice在创建的时候也依赖Aservice && 发现Aservice还正在创建中,那么此时才算是真正的出现了循环依赖。
1、出现循环依赖的主要原因:
①: Spring的生命周期太长了
②:Spring要在初始化后进行Aop.这两个原因是导致循环依赖出现的根本原因。
针对第一种原因解决方案:
使用一个Map就能解决
第二种场景的模拟:
正常我们Aop是在第五步,也就是初始化后开始会调用我们的BeanPostProcessor执行后置处理器,进行Aop.
但是如果这样做就会出现问题:
我们在BService中给aservices属性赋值的时候&#