spring容器启动

1、设置配置文件地址,子类调用继承方法、将地址封装在AbstractRefreshableConfigApplicationContext 类中,

2、容器刷新开始

3、为上下文刷新做准备、设置系统变量、初始化earlyApplicationListeners

bean工厂创建,bean的解析和注册

4、创建bean工厂,调用子类AbstractRefreshableApplicationContext 的 方法进行工厂创建和初始化

5、工厂创建、默认创建默认工厂DefaultListableBeanFactory

6、设置工厂唯一ID,定制bean工厂是否允许BeanDefinition覆盖, 是否允许循环引用

7、解析注册bean

8、初始化文件读取类 XmlBeanDefinitionReader,设置上下文环境和配置资源加载器

9、reader 通过文件地址读取对应的资源

10、将路径资源封装成Resource[] 格式,

11、将资源格式封装为 InputSource 类,并设置字节编码

12、将资源解析为文档格式 Document 类

13、开始注册bean

14、创建一个默认的文档读取 BeanDefinitionDocumentReader 类,用于读取文档格式的资源

15、获取真正的文档解析器 BeanDefinitionParserDelegate类

16、初始化BeanDefinitionParserDelegate类,讲读取器的资源封装到这个类中,将文档的属性封装到DocumentDefaultsDefinition类中,例如懒加载,自动装配等

17、解析bean前后有两个方法用户处理文档类

18、解析对应的标签,import, alias,bean, beans 将相关属性封装成对应的类 并注册到容器中

19、通过文档获取对应的元素解析器,例如普通的解析器,scan扫描解析器,进行bean的注册

20、封装BeanDefinitionHolder 转换为 BeanDefinition注册到容器

 

bean工厂功能扩展

21、设置默认资源、设置ApplicationContextAwareProcessor前后置处理器,调用对应的方法对实现了Aware接口的bean设置对应的系统变量,供用户使用

22、设置忽略自动装配的类,当实现该接口时忽略自动装配、一般为系统类

23、设置系统依赖接口自动装配的真正实现类

24、设置ApplicationListenerDetector前后置处理器,用于处理容器中实现事件监听器接口的类,并保存在上下文中AbstractApplicationContext类,

25、设置上线文通知LoadTimeWeaverAwareProcessor处理器,用户获取上下文的通知

26、Register default environment beans

27、postProcessBeanFactory,设置servelt对应的处理器

28、解析并注册(放置再处理器列表里)实现BeanPostProcessors接口的类,

29、initMessageSource,初始化消息资源

30、初始化事件发布器initApplicationEventMulticaster,可以自定义,没有就使用默认

31、注册监听器registerListeners,将用户实现的监听器注册到bean工厂的上下文中

32、实例化实现LoadTimeWeaverAware接口的类,以及提前处理并初始化单例bean

33、初始化实现LifecycleProcessor接口的类,用于处理对应的逻辑

34、调用LifecycleProcessor 的 onRefresh()方法

35、发布上下文刷新事件ContextRefreshedEvent类