spring10-refresh()
spring之启动流程
- spring启动主要做的几件事情
- 构造一个beanFactory对象
- 解析配置类,得到beanDefiniton并注册到beanfactory中
- 比如解析@ComponentScan
- @Import
- @Bean
- 为了支持国际化,初始化messageSource
- 支持事件,初始化ApplicationEventMulticaster
- 支持用户自定义的applicationListener添加到applicationContext中,等spring启动完就发布事件
- 创建非懒加载的单利bean并存到beanfactory
- 调用lifecycle Bean的start()
- 发布contextRefreshedEvent事件
- beanFactoryPostProcessor
- 作为beanFactory的后置处理器,用来对bean进行加工
- beanDefinitionRegistrypostprocessor
- 实现这个接口可以注册beanDefinition
- refresh()
- 加载或刷新持久化的配置,实例化所有的单例
- 他的底层原理如下:构造beanfacotry
- 构造annotationBeandefinitonReader,注册beanDefinion ,对beanfactory添加postProcessor
- 构造classpathBeanDefinitionScanner(扫描并注册beandefiniton)
- 调用refresh()
- prepareRefresh();
- 记录启动时间
- 设置一些东西到environment中
- 验证environment中是否包括必要属性
- obtainFreshBeanfacotry()
- prepareBeanfactory
- postProcessorBeanfactory
- invokeBeanfactoryPostProcessors
- 至此,beanfacotryPostProcessor的逻辑执行完了,得到beanDefinition并注册到beanFactory中
- registerBeanPostProcessors;用户注册一个
- initMessageSource:国际化
- initApplicationEventMulticaster:事件发布
- onRefresh:给abstractApplicationContext的子类进行扩展
- registerListeners
- finshBeanFactoryinitialization 实例化非懒加载的bean
- finshrefresh
- 设置applicationContext的lifecycleProcessor
- 调用lifecycleprocessor的onfresh(),调用start开始生命周期
不恋尘世浮华,不写红尘纷扰