Spring Boot初始化阶段
通常情况下,我们启动一个SpringBoot应用,会以下面的方式启动:
public static void main(String[] args) {
SpringApplication.run(MyBootstrap.class, args);
}
除了以上方式外,Spring boot还提供了SpringApplicationBuilder的api来启动:
public static void main(String[] args) {
new SpringApplicationBuilder(MyBootstrap.class)
.bannerMode(Banner.Mode.CONSOLE)
.listeners( event -> System.out.println(
event.getClass().getSimpleName()))
.run(args)
.close();
}
Spring Boot初始化阶段属于运行期的准备阶段,而准备阶段主要有两阶段:构造阶段和配置阶段
构造阶段
在spring的构造函数中,将主配置类存储在SpringApplication的primarySources中,随后依次进行推断web应用类型,加载spring应用上下文初始化器,加载springboot应用实践监听器,推断应用引导类。源码如下:
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
//1,设置主配置类
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
//2,推断web应用类型
this.webApplicationType = WebApplicationType.deduceFromClasspath();
//3,加载Spring应用上下文初始化器
setInitializers((Collection) getSpringFactoriesInstances(Applicati