【Spring】普通单例 Bean 的创建与三级缓存之间的交互

1  前言

Bean 的创建周期大家可能都知道,三级缓存大家也都知道,那么他俩之间交互的细节如何?这节我就捋一下普通 Bean 的一个创建过程和三级缓存之间的交互。

2  图解剖析

2.1  普通无代理 Bean 创建

大概有4次交互:

(1)getBean 的时候,getSingleton(beanName)先从三级缓存中逐个从一级到三级依次获取
(2)单例的话,getSingleton(beanName, factory) 进行创建,创建前后会分别往 singletonsCurrentlyInCreation 进行添加和移除
(3)创建的一路上 createBeanInstance 实例化对象出来后,有个提前暴露的判断,我看普通的 Bean 还是需要增强的都会往第三级缓存中放
(4)第二步的 getSingleton(beanName, factory) 创建完后,往第一级缓存中存放,并删除二三级缓存

下面是具体的执行过程哈:

2.2  普通有代理 Bean 创建

有代理的 Bean 和 上边这个没有代理的唯一区别就是初始化 Bean 的方法里的 初始化的后置处理器,会进行 Bean 代理的判断,从而生成代理对象出来哈:

3  小结

下节我再描述一个带 AOP 的增强 Bean 的创建与三级缓存的交互哈,有理解不对的地方欢迎指正哈。

posted @ 2024-03-12 06:29  酷酷-  阅读(45)  评论(0编辑  收藏  举报