创建并初始化spring容器中,refresh()方法中解析xml配置文件,注册容器后处理器,bean后处理器,初始化MessageSource,ApplicationEventMulticaster广播器,注册完ApplicationListener监听器后,关键一步就是创建和初始化其他非lazy-init的singleton beans。这样在容器初始化好的时候,这些singleton beans就已经创建和初始化好了,可以大大提高bean的访问效率。这个过程比较复杂,本文将详细分析整个流程。先看涉及到的关键类。
AbstractApplicationContext: 定义了spring容器初始化的大部分流程方法,子类必须遵循这个流程,但可以修改流程中的方法,典型的模板模式。bean创建的入口方法finishBeanFactoryInitialization也在这个方法中。
DefaultListableBeanFactory:一种BeanFactory容器实现,实现了ConfigurableListableBeanFactory接口
BeanDefinition:描述bean结构,对应XML中的或者注解中的@Component
AbstractBeanFactory:继承了BeanFactory容器,主要负责getBean创建Bean实例。
初始化spring容器中的refresh()方法中,会调用finishBeanFactoryInitialization()方法,它是创建和初始化其他非lazy-init的s