创建单例bean主要经过三个步骤:1.实例化,2.填充属性,3:初始化
一级缓存:singletonObjects,存放经过初始化后的bean。当通过名字获取bean的时候,如果这个名字对应的bean在一级缓存中,就直接从一级缓存中获取返回,这样就不会多次创建bean了。
二级缓存:earlySingletonObjects,存放根据原始对象进行AOP之后的代理对象。
三级缓存:singletonFactories,存放bean对应的工厂对象,在bean实例化之后就把生成最终对象的ObjectFactory对象放到三级缓存中,当从二级缓存获取不到对象的时候,就根据这个ObjectFactory生成最终对象。
注:只有单例bean会通过三级缓存提前暴露来解决循环依赖,而非单例的bean,每次从容器中获取都是一个新的对象,都会重新创建,所以非单例的bean是没有缓存的,不会将其放到三级缓存中。
标签:缓存,对象,spring,获取,bean,单例,三级 From: https://www.cnblogs.com/ldddd/p/16733711.html