1、启动类判空
2、判断是否是web环境
3、加载所有classpath下面的 META-INF/spring.factories文件 --
ApplicationContextInitializer
4、加载所有classpath下面的 META-INF/spring.factories文件 --
ApplicationListener
5、开始执行run方法
6、设置系统变量
java.awt.headless
7、加载所有classpath下面的 META-INF/spring.factories文件 --
SpringApplicationRunListener
8、执行所有SpringApplicationRunListener的started方法
9、实例化
ApplicationArguments对象
10、创建
environment
11、配置
environment,主要把run方法的参数配置到 environment
12、执行所有
SpringApplicationRunListener的environmentPrepared方法
13、如果不是web环境,但是是web的 environment,则把这个web的environment转换成标准的environment
14、打印banner
15、创建applicationContext 如果是web环境,实例化
AnnotationConfigServletWebServerApplicationContext对象,不是web环境,实例化AnnotationConfigApplicationContext对象
16、如果
beanNameGenerator不为空则把beanNameGenerator注入到context里面去
17、回调
所有ApplicationContextInitializer的initialize方法
18、发送事件,调用SpringApplicationRunListeners中的
contextPrepared方法
19、context中注入
springApplicationArguments和springBootBanner实例
20、把所有的源加载到context中
load(context, sources.toArray(new Object[0]));
21、发送事件
listeners.contextLoaded(context);
22、执行
refresh(context);方法,并调用context.registerShutdownHook();