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方法
暂存 ,系统默认参数配置
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication app=new SpringApplication(App.class);
Map<String, Object> defaultProperties=new HashMap<>();
defaultProperties.put("user", "qiqisx");
defaultProperties.put("password", "4656512.0a");
app.setDefaultProperties(defaultProperties);
ConfigurableApplicationContext context=app.run(args);
ApplicationArguments ag=context.getBean(ApplicationArguments.class);
System.out.println(ag.getOptionNames());
System.out.println(context.getEnvironment().getProperty("user"));
System.out.println(context.getEnvironment().getProperty("password"));
context.close();
}
}