/** * Cache of singleton objects: bean name to bean instance. * 【一级缓存】用于存放完全初始化好的 bean,从该缓存中取出的 bean 可以直接使用。 */ privatefinal Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
/** * Cache of singleton factories: bean name to ObjectFactory. * 【三级缓存】用于存放 bean 工厂对象ObjectFactory(三级缓存中Bean的代理对象) * ObjectFactory.getObject()方法描述了如何获取这个三级缓存的对象。 */ privatefinal Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);
/** * Cache of early singleton objects: bean name to bean instance. * 【二级缓存】用于存放提前暴露的单例对象的cache,原始的 bean 对象(尚未填充属性,半成品bean)。 */ privatefinal Map<String, Object> earlySingletonObjects = new ConcurrentHashMap<>(16);
/** * Names of beans that are currently in creation. * 正在创建中的beanName */ privatefinal Set<String> singletonsCurrentlyInCreation = Collections.newSetFromMap(new ConcurrentHashMap<>(16));