Spring三级缓存

重点AOP作用于代理对象,方法中调用其余方法的注解需要将本类注入进去。

当AService出现了循环依赖的情况下---->AService提前进行AOP

0.creatingSet.add('aService')

1.class ->实例化得到Aservice原始对象-->提前进行AOP--->AService代理对象--->Map

2.给bService属性赋值--->从单例池去找bService--->找不到--->创建BService的bean

        BService的Bean的生命周期

        2.1、class->实例化得到Bservice原始对象--->Map

        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

        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 (单例池)

二级:earlySingletonObjects map

三级:singletonFactories(就是上边说map)

你可能感兴趣的:(spring)