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