springboot启动流程
1、创建SpringApplication实例
保存一些信息:包括
- 保存主配置类等信息
- 判断当前应用类型
- 去spring.factory文件中找org.springframework.boot.Bootstraper, 初始化启动引导器
- 去spring.factory文件中找ApplicationContextInitializer,容器初始化器
- 去spring.factory文件中找ApplicationListener
2、运行SpringApplication
- 创建引导上下文(Context环境) createBootstrapContext(),获取到所有bootstrappers依次执行initialize()来完成引导启动器器上下文环境的设置
- 去spring.factory文件中找SpringApplicationRunListener,获取所有RunListener(运行监听器),为了方便所有Listener进行事件感知
- 遍历SpringApplicationRunListener,调用starting方法,相当于通知所有监听器,项目正统在启动
- 保存命令行参数
- 准备环境:创建或返回基础环境信息,包括读取所有配置源的配置属性值,通知所有监听器当前环境准备完成
- 创建IOC容器:根据项目类型创建容器;会创建AnnotationConfigServletWebServerApplicationContext
- 准备ApplicationContext IOC容器的基本信息:保存环境信息,IOC容器的后置处理流程,应用初始化器:通知所有ApplicationContextInitializer调用initialize,对IOC容器进行初始化扩展功能,遍历所有的ApplucationListener调用contextPrepared
- 刷新IOC容器,创建IOC容器中的所有组件
- 遍历监听器调用listener.started(context)
- 调用所有的runners:获取容器中的ApplicationRunner或者CommandLineRunner方法
- 调用所有监听器的runnning方法;
- 上述过程如果出现异常,则会调用Listener的failed方法。