project/spring/spring源码解读/spring02刷新.md

89 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第二章刷新
synchronized使用当前类中final对象。
## 获取启动指标StartupStep
```java
StartupStep contextRefresh = this.applicationStartup.start("spring.context.refresh");
```
## 刷新前预处理prepareRefresh()
1. 记录启动时间
2. 设置当前状态未关闭
3. 设置当前状态活跃
4. 初始化上下文资源中的占位符initPropertySources();
5. 校验上下文可解析getEnvironment().validateRequiredProperties();
6. 初始化监听器earlyApplicationListenersLinkedHashSet
7. 初始化事件earlyApplicationEventsLinkedHashSet
## 刷新内部类obtainFreshBeanFactory()
1. 刷新工厂refreshBeanFactory()
1. 销毁类
2. 关闭工厂
3. 创建新的工厂
4. 设置工厂customizeBeanFactory序列化类名加对象十六进制弱引用。
5. 定制工厂设置是否可重写,是否可循环引用
6. 加载工厂loadBeanDefinitionsXmlBeanDefinitionReader
2. 返回工厂getBeanFactory()
## 装配工厂prepareBeanFactory
1. 设置加载类
2. 是否支持spel
3. 设置Property编辑器
4. 设置类后置处理器post processorBeanPostProcessor添加感知处理器AwareProcessor
5. 忽略加载的其他感知接口
6. 注册解析接口BeanFactory、ResourceLoader、ApplicationEventPublisher、ApplicationContext
7. 添加后置处理器ApplicationListenerDetector内部类检测
8. 图片设置
9. 加载环境中的配置信息
## 内部类处理配置postProcessBeanFactory(beanFactory);
## 设置启动步骤spring.context.beans.post-process
## 将工厂注册为beaninvokeBeanFactoryPostProcessors(beanFactory)
## 注册工厂beanregisterBeanPostProcessors(beanFactory)
## 启动步骤spring.context.beans.post-process完成
## 初始化message sourceinitMessageSource()
## 初始化事件多播器initApplicationEventMulticaster()
## onRefresh()
## 注册监听器registerListeners()
## 初始化剩余信息finishBeanFactoryInitialization(beanFactory)
## 完成刷新
1. 清空资源缓存
2. 初始化生命周期处理器
3. 启动生命周期
4. 发布事件
5. NativeDetector
## 异常处理
1. 销毁之前创建的单例
2. 设置活跃状态为false
3. 抛出异常
## finally
1. 清空缓存
2. 结束spring.context.refresh