spring三级缓存解决循环依赖

创建单例bean主要经过三个步骤:1.实例化,2.填充属性,3:初始化

一级缓存:singletonObjects,存放经过初始化后的bean。当通过名字获取bean的时候,如果这个名字对应的bean在一级缓存中,就直接从一级缓存中获取返回,这样就不会多次创建bean了。

二级缓存:earlySingletonObjects,存放根据原始对象进行AOP之后的代理对象。

三级缓存:singletonFactories,存放bean对应的工厂对象,在bean实例化之后就把生成最终对象的ObjectFactory对象放到三级缓存中,当从二级缓存获取不到对象的时候,就根据这个ObjectFactory生成最终对象。

注:只有单例bean会通过三级缓存提前暴露来解决循环依赖,而非单例的bean,每次从容器中获取都是一个新的对象,都会重新创建,所以非单例的bean是没有缓存的,不会将其放到三级缓存中。

posted @ 2022-09-27 11:17  乐多多多多多多  阅读(70)  评论(0)    收藏  举报
/* 看板娘 */