Spring三级缓存

发布时间:2024年01月21日

重点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)

文章来源:https://blog.csdn.net/qq_53946134/article/details/135728355
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。