首先我们来看一段代码,SpringBoot启动类:
public static void main(String[] args) {
SpringApplication.run(StudentApplication.class);
}
只有一行代码,却完成了ssm中大量配置才能完成的事情,这一行代码中的一个方法究竟做了什么事情。
在我们该类之后,大致做了两件事,一是SpringApplication初始化,二是SpringApplication.run()启动
public static ConfigurableApplicationContext run(Class<?> primarySource,
String... args) {
return run(new Class<?>[] { primarySource }, args);
}
调用静态方法初始化SpringApplication,然后启动运行
public static ConfigurableApplicationContext run(Class<?>[] primarySources,
String[] args) {
return new SpringApplication(primarySources).run(args);
}
初始化方法底层代码
public SpringApplication(Class<?>... primarySources) {
this(null, primarySources);
}
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
//初始化资源加载器
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
//将启动类的配置信息存储在集合中
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
//推断web环境的类型(reactive,none,servlet)
this.webApplicationType = deduceWebApplicationType();
//设置初始化器 从配置文件spring.factories中查找所有的key=org.springframework.context.ApplicationContextInitializer的类【加载,初始化,排序】
setInitializers((Collect