Spring循环依赖

A {

@Autowried
B b;

}

B{

@Autowried
A a;

}

AService{

BService bservice;

}

BService{

AService aservice;

}
====条件

 什么时候去将Aop提前?
  出现了循环依赖的时候 我们才将Aop提前。
 怎么去判断出现了循环依赖?
    我们在后一个的属性填充的时候去判断最合适       

new 产生一个对象

Bean=====好几个步骤

cto.newInstance()
AService class最终变为我们的一个bean对象
1、扫描 class
bd
2、有一个Map能够标记我们这个Aservice正在创建ture // PostProcessor
2、实例化 对象 (1、工厂方式创建 2、构造函数,去反射)=原始对象
=我们的三级缓存
=将道理来说,我们只要将我们的原始对象放到这个三级缓存就行了,spring它不是这样做的

    它是在我们的这个三级缓存中,存放的而是一个lambda表达式===只是说这个lambda表达式里面除了将我们的原始对象存进去之外,他还存放了其它的东西。      

3、属性填充(PopularBean)=bservice=单例池找找不到创建bservice
4、初始化
5、最重要一个环节
=Aop====初始化后 === postProcessor ===== AOP是一个独立的类 进行Aop就是去实现我们的PostProcessor
6、bean放入我们的单例池中去

==============================

Bservice class最终变为我们的一个bean对象
1、扫描 class
bd
2、实例化 对象 (1、工厂方式创建 2、构造函数,去反射)=
3、属性填充(PopularBean)=aservice=单例池找找不到= 去三级缓存中去找 === 找到一个lambda表达式=执行我们lambda表达式的方法 拿到我们的原始对象=AopAservice的理对象1=放到我们
的二级缓存中去
4、初始化
5、最重要一个环节=Aop
$Cglib
6、bean放入我们的单例池中去
=====如果说我们在第五步进行了Aop,那我们放入单例池中的这个对象是一个什么对象?就是我们的代理对象

解释一下什么是原始对象什么是代理对象

Cservice class最终变为我们的一个bean对象
1、扫描 class
bd
2、实例化 对象 (1、工厂方式创建 2、构造函数,去反射)=
3、属性填充(PopularBean)=aservice=单例池找找不到=我们就从我们的二级缓存中找去三级缓存中去找 === 找到一个lambda表达式=执行我们lambda表达式的方法 拿到我们的原始对象=Aop代理对象2
4、初始化
5、最重要一个环节
=Aop
$Cglib
6、bean放入我们的单例池中去
=====如果说我们在第五步进行了Aop,那我们放入单例池中的这个对象是一个什么对象?就是我们的代理对象

解释一下什么是原始对象什么是代理对象

可以解决对象冲突

 说白了就是可以解决如果在第五步进行了Aop,将你的代理对象放入单例池和我们熟悉填充中的对象不是同一个的问题====AbstractAutoProxyCreator.SmartInstantiationAwareBeanPostProcesso完成了我们的Aop

怎么解决?
Spring是将我们Aop提前了

我们什么时候把我们Aop去进行提前?
什么时候去将Aop提前?
出现了循环依赖的时候 我们才将Aop提前。
怎么去判断出现了循环依赖?
我们在后一个的属性填充的时候去判断最合适

===Hzkmap

三个map

我们口中所谓的三级缓存
一级缓存:单例池CMap<key,value>key:是beanName,value是bean对象SingletonObjects()
二级缓存:Map
<key,valye>=keybeanName,value,是我们三级缓存产生的一个对象,如果说你进行了Aop,那么存放的就是我们的代理对象,反之,则是我们的原始对象。
三级缓存:Map
==<key,value>=key=beanName,value===lambda表达式

至少还需要一个Map===creatingMap()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值