一.构建SpringApplication对象
- 将我们的启动类添加在主要资源,primarySources是一个LinkedHashSet
- 设置webApplicationType 服务器类别
- 初始化注册表 bootstrapRegistryInitializers getSpringFactoriesInstances(BootstrapRegistryInitializer.class)
- 设置初始化器 setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
- 设置监听器 setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
- 实例化main方法
注意:getSpringFactoriesInstances方法是根据传入的类型读取项目中在META-INF/spring.factories文件的对映的类的全路径名,然后通过createSpringFactoriesInstances()方法通过反射创建对象
二.通过构建的SpringApplication对象调用run方法
- 创建DefaultBootstrapContext上下文对象;
- 获取Spring程序运行监听器SpringApplicationRunListeners.
- 通过prepareEnvironment方法加载系统环境
- 创建ConfigurableApplicationContext对象
- 通过prepareContext装备上下文环境
- 调用refreshContext方法刷新上下文,里面调用的的是spring中refresh方法
- 调用afterRefresh后置处理上下文 目前是空实现
- 启动监听器 listeners.started(context, timeTakenToStartup);
- 启动ApplicationRunner及CommandLineRunner