【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 的创建与三级缓存的交互哈,有理解不对的地方欢迎指正哈。