本站资源收集于互联网,不提供软件存储服务,每天免费更新优质的软件以及学习资源!

Spring容器中Bean名称的三处存储:为何不只用beanDefinitionMap?

网络教程 app 1℃

Spring容器中Bean名称的三处存储为何不只用beanDefinitionMap

Spring容器中beanName为何有三处存储?

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

原因如下:

1. beanDefinitionMap的特性

beanDefinitionMap是一个ConcurrentHashMap,它无法保证迭代顺序。如果直接使用它的keys,在注入bean时无法保证名称顺序与注册顺序一致。

2. beanDefinitionNames的用途

beanDefinitionNames是一个有序列表,专门记录bean的注册顺序。注入时,Spring可以按照此顺序逐个实例化和注入bean。

3. frozenBeanDefinitionNames的用途

frozenBeanDefinitionNames是一个字符串数组,记录已冻结的bean名称。当DefaultListableBeanFactory处于冻结阶段时,不允许修改或添加新bean定义。

此时,frozenBeanDefinitionNames设置为null,以便在下一次访问时重新计算和更新冻结的bean名称。此过程在调用getMergedBeanDefinition方法时进行。

以上就是Spring容器中Bean名称的三处存储:为何不只用beanDefinitionMap?的详细内容,更多请关注范的资源库其它相关文章!

转载请注明:范的资源库 » Spring容器中Bean名称的三处存储:为何不只用beanDefinitionMap?

喜欢 (0)