(面试)Springboot的启动流程
在我们springboot项目启动的时候,会构建一个SpringbootApplication的实例,然后调用这个实例的run()方法,在调用run()方法之前,也就是构建SpringbootApplicatiion的时候,会进行一些初始化的操作:
- 将传入的启动类放入到LinkedHashSet中
- 判断是否为web环境,若存在ConfigurableWebApplicationContext则是web环境
- 创建并初始化ApplicationInitializer
- 创建并初始化ApplicationListener
- 初始化主类mainApplication
然后执行run()方法:
- 创建一个StopWatch计时器
- 配置awt系统属性
- 获取SpringbootApplicationListeners
- 启动SpringbootApplicationListeners
- 创建ApplicationArguments
- 创建并初始化ConfigurableEnvironment
- 配置忽略的bean信息
- 打印Banner(项目启动的时候的图标)
- 创建ConfigurableApplicationContext
- 准备ConfigurableApplicationContext
- 刷新ConfigurableApplicationContext
- 容器刷新后的动作
- SpringbootApplicationRunListner发布finish事件
- 计时器停止计时
- 启动所有的监视器
- 将应用上下文ConfigurableApplicationContext传递给每一个监视器