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开始生命周期
 
 
    不恋尘世浮华,不写红尘纷扰
                    
                
                
            
        
浙公网安备 33010602011771号