Springboot的运行流程
1、判断是否是web环境
2、加载左右Classpath下的META-INF/spring.factories ApplicationContextInitializer
3、加载所有classpath下的META-INF/spring.factories ApplicationListener
4、推断main方法所在类
5、开始执行run方法
6、设置Java.awt.headless系统变量
7、加载所有classpath下面META-INF/spring.factories springApplicationRunListener
8、执行所有SpringApplicationRunListener的started方法
9、实例化SpringApplicationArguments对象
10、创建environment
11、配置environment,主要是把run方法的参数配置到environment
12、执行所有springApplicationRunlistener的environmentPrepared方法
13、如果不是web环境,但是死web的environment,则把这个web的environment转换成标准的environment
14、打印banner
15、初始化Applicationcontext,如果是web环境,则实例化AnnotationConfigEmbeddedWebApplicationContext对象,否则实例化annotation
16、如果beanNameGennerator不为空,就把beanNameGenerator对象注入到context里面去
17、执行所有SpringApplicationRunListener的contextPrepared方法
18、执行所有springApplicationRunListener的contextPrepared方法
19、依次往spring容器中注入:ApplicationArgument,banner
20、加载所有源到context里
21、执行所有SpringApplicationRunListener的contextPrepared方法
22、执行所有context的refresh方法,并调用context的registeris的registerShutdown
23、回调,获取容器中所有appliationRunner,ConnandRunner等接口,然后排序
24、执行所有springApplicationRunListene的finished方法