复制
小结可以看到SpringBoot
项目启动过程的源码的源码还是非常复杂的,但是在难啃的骨头只要坚持下去还是能啃下它的 。通过分析SpringBoot
项目启动过程的源码分析 , 我们可以总结出SpringBoot
项目启动过程主要做了以下几件事情:
一、 实例化和初始化SpringApplication
对象实例 , 在这个过程会去初始化SpringApplication
对象的属性,包括:
- 1.设置是够注册关停钩子标识
- 2.推断Web应用程序类型
- 3.加载
META-INF/spring.factories
配置文件中配置的初始化器和启动监听器 - 4.推断项目主启动类等工作
SpringApplication
实例对象的run方法,该方法返回的是一个AnnotationConfig在这个过程中又可以分解为以下几个步骤- 1.启动定时器记录记录整个SpringBoot应用启动过程花费时长
- 获取
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应用上下文实际的beanFactory
是DefaultListableBeanFactory
,它里面使用了一个初始容量为256的ConcurrentHashMap
的数据结构存放BeanDefination
对象 - 9 . 刷新应用上下文:如果是
Servlet
类型应用这个过程会去实例化和初始化一个web服务器并启动这个web服务器,如过启动web服务器失败则会在SpringApplication
实例对象设置了关停钩子的情况下注册关停钩子 , 同事关闭web服务器并销毁所有的bean -10; 运行实现了ApplicationRunner
和CommandLineRunnner
接口组件类中的任务 -11. 如果整个运行过程捕获到异常则收集异常信息,监听器发布应用失败事件,抛出捕获到异常
推荐阅读
- 一次SpringBoot版本升级,引发的血案
- SpringBoot 03: 常用web组件 - - - 拦截器 + Servlet + 过滤器
- SpringBoot 02: 初识SpringBoot
- 超详细 SpringBoot 整合 Elasticsearch .md
- SpringBoot 01: JavaConfig + @ImportResource + @PropertyResource
- MindStudio模型训练场景精度比对全流程和结果分析
- 纸嫁衣4第三章交错通关流程图文攻略
- 纸嫁衣4第一章异途通关流程图文攻略-纸嫁衣4红丝缠第一章怎么过
- 纸嫁衣4第二章不期通关流程图文攻略-纸嫁衣4红丝缠第二章怎么过
- 洛克王国初秋落叶活动流程攻略-洛克王国初秋落叶怎么玩