Spring的核心流程是读取配置文件,解析并封装成BeanDefinition,并将所有的BeanDefinition收集到一个叫DefaultListableBeanFactory的容器中。
一、setConfigLocation
设置配置路径方便后续对其进行解析
二、refresh方法,解析并封装BeanDefinition
该方法中有几个重要的方法
1.obtainFreshBeanFactory() 解析配置文件,并解析bean标签收集封装成BeanDefinition,将BeanDefinition封装到DefaultListableBeanFactory中
2.prepareBeanFactory()
初始化一些基本的类到BeanFactory中,或者将该BeanFactory注入到其他组件中,如
Resolver、Registrar、Processor、Aware、Dependency,下图所示
3.postProccessBeanFactory()
添加web相关的ServletContextAwareProcessor到容器
4.invokeBeanFactoryPostProcessors()
获取容器中所有实现BeanDefinitionRegistryPostProcessor的类对象(字面理解就是BeanDefinition的注册器),并完成postProcessBeanDefinitionRegisry的方法调用,最终完成BeanDefinition的注册
5.registerBeanPostProccessors
获取所有BeanPostProcessor的BeanDefinition对象,再通过getBean进行实例化BeanPostProcessor对象,然后按照排序规则重新封装成BeanPostProcessor对象集合
6.finishBeanFactoryInitialization
对非抽象的、单例的、非懒加载的BeanDefinition进行getBean实例化