spring10-refresh()

spring之启动流程

  1. spring启动主要做的几件事情
    1. 构造一个beanFactory对象
    2. 解析配置类,得到beanDefiniton并注册到beanfactory中
      1. 比如解析@ComponentScan
      2. @Import
      3. @Bean
    3. 为了支持国际化,初始化messageSource
    4. 支持事件,初始化ApplicationEventMulticaster
    5. 支持用户自定义的applicationListener添加到applicationContext中,等spring启动完就发布事件
    6. 创建非懒加载的单利bean并存到beanfactory
    7. 调用lifecycle Bean的start()
    8. 发布contextRefreshedEvent事件
  2. beanFactoryPostProcessor
    1. 作为beanFactory的后置处理器,用来对bean进行加工
  3. beanDefinitionRegistrypostprocessor
    1. 实现这个接口可以注册beanDefinition
  4. refresh()
    1. 加载或刷新持久化的配置,实例化所有的单例
    2. 他的底层原理如下:构造beanfacotry
    3. 构造annotationBeandefinitonReader,注册beanDefinion ,对beanfactory添加postProcessor
    4. 构造classpathBeanDefinitionScanner(扫描并注册beandefiniton)
    5. 调用refresh()
    6. prepareRefresh();
      1. 记录启动时间
      2. 设置一些东西到environment中
      3. 验证environment中是否包括必要属性
    7. obtainFreshBeanfacotry()
    8. prepareBeanfactory
    9. postProcessorBeanfactory
    10. invokeBeanfactoryPostProcessors
    11. 至此,beanfacotryPostProcessor的逻辑执行完了,得到beanDefinition并注册到beanFactory中
    12. registerBeanPostProcessors;用户注册一个
    13. initMessageSource:国际化
    14. initApplicationEventMulticaster:事件发布
    15. onRefresh:给abstractApplicationContext的子类进行扩展
    16. registerListeners
    17. finshBeanFactoryinitialization 实例化非懒加载的bean
    18. finshrefresh
    19. 设置applicationContext的lifecycleProcessor
    20. 调用lifecycleprocessor的onfresh(),调用start开始生命周期
posted @ 2023-02-20 17:42  小傻孩丶儿  阅读(12)  评论(0编辑  收藏  举报