1、bean定义层次 自动和手动 自动: beanDefinitionMap:bean定义,还没有进行后置处理器操作 (Map:key->name value->beanDefinition) beanDefinitionNames:beanName (List:name) 手动: manualSingletonNames:手动注册的beanName (List:name) !!!!注意:手动注册bean只有beanName,没有bean定义 beanDefinition 2、bean注册层次 mergedBeanDefinitions:bean定义,已经进行过后置处理器操作,相当于最新的beanDefinition (Map:key->name value->beanDefinition) 注意:不包含手动注册的bean,还有此bean在bean实例化前,就移除bean定义 3、bean实例化、初始化层次 alreadyCreated:在createBean()方法之前, 已经创建过至少一次的beanName 注意:这边如果是多例的bean也只有一次,因为是set registeredSingletons:在createBean()方法之后, 已经注册过至少一次的所有bean的name 注意:这边如果是多例的bean也只有一次,因为是set singletonObjects:一级缓存,一个单例bean【实例化+初始化】都完成之后,将会加入一级缓存,也就是我们俗称的单例池。 earlySingletonObjects:二级缓存,用于存放【实例化完成,还没初始化】的实例,提前暴露,用于解决循环依赖问题。 singletonFactories:三级缓存,存放匿名工厂对象,!!!需要注意lambda的实现方法, 与二级缓存不同的是,它可以应对产生代理对象。 解决循环依赖必须的,这边实际是beanName,但是指的是bean dependentBeanMap:与下面相反 key->bean中被注入的其他bean value->bean dependenciesForBeanMap:key->bean value->bean中被注入的其他bean
容器中涉及到的成员变量
最新推荐文章于 2024-08-14 11:15:42 发布