关于frozenBeanDefinitionNames
来源:2-2 Spring源码的下载和编译

Tristeza
2020-12-06
private volatile String[] frozenBeanDefinitionNames;
老师你好,今天在阅读源码的过程中发现了一个集合是用来保存冻结bean的,想问一下这个被冻结的bean是什么意思?会在什么地方用到?网上查到的定义是之后不会再被修改的bean,那么为什么在注册新bean的时候会把整个集合清空掉呢?
写回答
1回答
-
同学好,源码出现它的地方并不多,主要是用在
freezeConfiguration(),即冻结全部bean定义,给被注册的bean定义发信号告诉它们今后不再被修改和进一步后续处理。它允许factory去积极缓存bean定义元数据。主要就是证明这些bean已经初始化完成,后续不修改了。至于注册时候会清空,主要是注册之后,还会有后续的bean初始化的操作,此时bean还可能改变,同学可以看看freezeConfiguration调用的地方,都是在诸如finishBeanFactoryInitialization这样的方法里被调用,从beanDefinitionNames里面获取已经初始化完成的bean存入进去的
012020-12-08
相似问题