1、指定当前应用类型为servlet,分为reactive/servlet/none三种
this.webApplicationType = WebApplicationType.deduceFromClasspath();
2、从spring.factories文件中加载key值为ApplicationContextInitializer的7个initializer
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
3、从spring.factories文件中加载key值为ApplicationListener的11个listener
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
4、根据堆栈信息找到main方法与当前springApplication类
private Class<?> deduceMainApplicationClass() {
try {
StackTraceElement[] stackTrace = new RuntimeException().getStackTrace();
for (StackTraceElement stackTraceElement : stackTrace) {
if ("main".equals(stackTraceElement.getMethodName())) {
return Class.forName(stackTraceElement.getClassName());
}
}
}
catch (ClassNotFoundException ex) {
// Swallow and continue
}
return null;
}