SpringBoot启动流程源码分析( 八 )

复制
小结可以看到SpringBoot项目启动过程的源码的源码还是非常复杂的,但是在难啃的骨头只要坚持下去还是能啃下它的 。通过分析SpringBoot项目启动过程的源码分析 , 我们可以总结出SpringBoot项目启动过程主要做了以下几件事情:
一、 实例化和初始化SpringApplication对象实例 , 在这个过程会去初始化SpringApplication对象的属性,包括:

  • 1.设置是够注册关停钩子标识
  • 2.推断Web应用程序类型
  • 3.加载META-INF/spring.factories配置文件中配置的初始化器和启动监听器
  • 4.推断项目主启动类等工作
二、 运行SpringApplication实例对象的run方法,该方法返回的是一个AnnotationConfig在这个过程中又可以分解为以下几个步骤
  • 1.启动定时器记录记录整个SpringBoot应用启动过程花费时长
    1. 获取SpringApplication实例对象的启动类监听器并遍历发布应用开始启动事件
  • 3.实例化启动命令行参数
  • 4.打印SpringBoot项目图标
  • 5. 启动监听器发布应用开始启动事件
  • 6. 准备启动环境:这一过程会实例化一个ConfigurableEnvironment类的配置环境对象,并将从应用配置文件中读取到的环境变量填充到配置环境对象中;监听器发布环境准备事件,然后再将初始化的配置环境对象与SpringApplication实例对象绑定,绑定过程中会解析环境变量中的属性占位符变量
  • 7. 创建Spring应用上下文:这一过程会根据前面实例化和初始化SpringApplication过程中推断出的应用程序类型通过反射的方式加载和实例化具体的Spring应用上下文实现类 。Servlet类型对应的Spring应用上下文是AnnotationConfigServletWebSewrverApplicationContext类实例
  • 8. 准备Spring应用上下文: 这一过程会去设置Spring应用上下文环境的环境属性、 后处理Spring应用上下文、监听器发布应用上下文加载事件、添加Spring应用上下文beanFactory后置处理器、加载配置类和xml配置文件以及扫描包下的Bean定义并注册到beanFactory,Spring应用上下文实际的beanFactoryDefaultListableBeanFactory,它里面使用了一个初始容量为256的ConcurrentHashMap的数据结构存放BeanDefination对象
  • 9 . 刷新应用上下文:如果是Servlet类型应用这个过程会去实例化和初始化一个web服务器并启动这个web服务器,如过启动web服务器失败则会在SpringApplication实例对象设置了关停钩子的情况下注册关停钩子 , 同事关闭web服务器并销毁所有的bean -10; 运行实现了ApplicationRunnerCommandLineRunnner接口组件类中的任务 -11. 如果整个运行过程捕获到异常则收集异常信息,监听器发布应用失败事件,抛出捕获到异常
有关SpringBoot项目启动调试过程,下期笔者尝试录个视频讲一讲,本文就不再继续啰嗦了 。觉得本文对你有帮助的同学希望能给我点个赞并点亮右下角的【在看】,谢谢!

推荐阅读