springboot 启动流程
一、构建启动类对象SpringApplication
- 获取主资源、主类
- 获取应用类型
- 从META-INF/spring.factories获取中获取启动器列表List<ApplicationContextInitializer<?>>
- 从META-INF/spring.factories获取中获取监听器列表List<ApplicationListener<?>>
二、调用run方法
- 从META-INF/spring.factories获取中获取启动监听类SpringApplicationRunListeners并启动starting
- 获取参数类ApplicationArguments
- 准备环境类ConfigurableEnvironment
- 根据应用类型创建环境对象
- 配置环境参数
- 启动”环境准备“监听动作
- 打印banner
- 创建应用上下文ConfigurableApplicationContext
- 准备上下文
- 设置环境
- 运行各个应用启动器ApplicationContextInitializer的initialize方法
- 调用”上下文准备“监听动作
- 注册用户启动类
- 启动“上下文已加载”监听动作
- 刷新上下文
- 注册程序停止线程钩子
- 调用父级上下文AbstractApplicationContext完成刷新上下文
- 准备容器DefaultListableBeanFactory
- 注册web相关对象request、response、session等的工厂对象
- 注册时间运行处理器applicationEventMulticaster
- 创建web容器WebServer
- 将各个监听器注册到applicationEventMulticaster
- 完成容器beanFactory初始化
- 注册必要的和用户定义的bean
- 完成刷新
- 调用”启动完成“监听动作
- 回调ApplicationRunner、CommandLineRunner的实现类的run方法
- 调用“应用已运行中”监听动作