重点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 (getEarlyBeanReference)
2.3、给其他属性赋值
2.4、其余事情
2.5、将对象放入单例池
4.其余事情AOP---->AService代理对象------>postProcessAfterInitialization()
5.createSet.remove('aService')
6.creatingSet.remove('aService')
7.将对象放入单例池
三级缓存
一级:singletonObjects map<beanName,Object> (单例池)
二级:earlySingletonObjects map<beanName, Object>文章来源:https://www.toymoban.com/news/detail-812475.html
三级:singletonFactories(就是上边说map)文章来源地址https://www.toymoban.com/news/detail-812475.html
到了这里,关于Spring三级缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!