创建SpringApplication实列
调用initializer方法
private void initialize(Object[] sources) {
// 1. 将传入的Application 放入 Set<Object> 集合中
if (sources != null && sources.length > 0) {
this.sources.addAll(Arrays.asList(sources));
}
// 2. 判断是否是web环境
this.webEnvironment = this.deduceWebEnvironment();
// 3. 创建并初始化 ApplicationInitializer 列表
this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
// 4. 创建并初始化 ApplicationListeners
this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
// 5. 初始化主类 mainApplicationClass
this.mainApplicationClass = this.deduceMainApplicationClass();
}
判断是否是WBe环境
private boolean deduceWebEnvironment() {
String[] var1 = WEB_ENVIRONMENT_CLASSES;
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
String className = var1[var3];
if (!ClassUtils.isPresent(className, (ClassLoader)null)) {
return false;
}
}
return true;
}
- 主要是判断 className 里有没有 javax.servlet.Servlet", "org.springframework.web.context.ConfigurableWebApplicationContext这两个类 如果有就是WEB环境 否则就不是。
创建并初始化ApplicationInitializer
- 创建 Initializer 实例 先获取initializer的名字 然后通过set去重 然后将所有initializer实例化
- 通过反射创建对象的方式
- 根据SpringFactoriesLoader.loadFactory-Name(type,classLoader) 获取initializer名称
创建并初始化 ApplicationListeners
同上
run方法
主要工作
- 创建计时器 StopWatch
- 配置awt系统属性
- 获取SpringApplicationRunListeners (获取Spring应用运行时监听器)
- 启动SpringApplicationRunListeners
- 创建ApplicationArguments
- 创建并初始化 ConfigurableEnvironment (配置环境变量)
- 打印Banner
- 创建ConfigurableApplicationContext (应用程序上下文)
- 准备ConfigurableApplicationContext
- 刷新ConfigurableApplicationContext
- 容器刷新后动作
- SpringApplicationRunListeners发布finish事件 (运行时监听器发布完成事件)
- 计时器停止计时