Spring容器中beanName为何有三处存储?
在Spring容器中,DefaultListableBeanFactory类维护了三个变量来存储bean名称:beanDefinitionMap、beanDefinitionNames和frozenBeanDefinitionNames。那么,为何不能直接使用beanDefinitionMap.keys()替代后两个变量呢?
原因如下:
1. beanDefinitionMap的特性
beanDefinitionM

2. beanDefinitionNames的用途
beanDefinitionNames是一个有序列表,专门记录bean的注册顺序。注入时,Spring可以按照此顺序逐个实例化和注入bean。
3. frozenBeanDefinitionNames的用途
frozenBeanDefinitionNames是一个字符串数组,记录已冻结的bean名称。当DefaultListableBeanFactory处于冻结阶段时,不允许修改或添加新bean定义。
此时,frozenBeanDefinitionNames设置为null,以便在下一次访问时重新计算和更新冻结的bean名称。此过程在调用getMergedBeanDefinition方法时进行。








