SpringBoot-02-主启动类之SpringApplication
2.3 SpringApplication
不简单的方法
看上去是简单的运行了一个main方法,实际上是开启了一个服务:
@SpringBootApplication
public class Springboot01HelloApplication {
public static void main(String[] args) {
//将SpringBoot应用启动
SpringApplication.run(Springboot01HelloApplication.class, args);
}
}
该方法主要分为两个部分:
- SpringApplication的实例化
- run方法的执行
SpringApplication
这个类主要做一下四个事情:
推断应用的类型
是普通项目还是web项目;- 查找并加载所有
可用初始化器
,设置到initializers属性中; - 找出所有的
应用程序监听器
,设置到listeners属性中; 推断并设置main方法的定义类
,找到运行的主类;
查看其构造器:
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
...
this.webApplicationType = WebApplicationType.deduceFromClasspath();
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
this.mainApplicationClass = deduceMainApplicationClass();
}
run方法流程分析