重点AOP作用于代理对象,方法中调用其余方法的注解需要将本类注入进去。
当AService出现了循环依赖的情况下---->AService提前进行AOP
0.creatingSet.add('aService')
1.class ->实例化得到Aservice原始对象-->提前进行AOP--->AService代理对象--->Map<be anMap, Aservice代理对象>
2.给bService属性赋值--->从单例池去找bService--->找不到--->创建BService的bean
? ? ? ? BService的Bean的生命周期
? ? ? ? 2.1、class->实例化得到Bservice原始对象--->Map<beanName, BService原始对象>
? ? ? ? 2.2、给aService属性赋值--->从单例池去找aService(一级缓存)--->找不到---->创建creatingSet--->Aservice出现了循环(一级缓存)---->earlySingletonObjects(二级缓存)---->Map(三级缓存)----->AService原始对象--->提前AOP----->Map---->lambda表达式--->执行---AOP--->AService代理对象(不完整)---->earlySingletonObjects(二级缓存)
? ? ? ? 2.3、给其他属性赋值
? ? ? ? 2.4、其余事情
? ? ? ? 2.5、将对象放入单例池
3.给其他属性赋值
?????????CService的Bean的生命周期
? ? ? ? 2.1、class->实例化得到Bservice原始对象--->Map<beanName, BService原始对象>
? ? ? ? 2.2、给aService属性赋值--->从单例池去找aService--->找不到---->创建creatingSet--->Aservice出现了循环---->earlySingletonObjects---->提前AOP----->Map---->AService代理对象(不完整)---->earlySingletonObjects
? ? ? ? 2.3、给其他属性赋值
? ? ? ? 2.4、其余事情
? ? ? ? 2.5、将对象放入单例池
4.其余事情AOP---->AService代理对象
5.createSet.remove('aService')
6.将对象放入单例池
三级缓存
一级:singletonObjects map<beanName,Object> (单例池)
二级:earlySingletonObjects map<beanName, Object>
三级:singletonFactories(就是上边说map)