概述
以下的是项目的启动入口
@SpringBootApplication
public class NavWebApplication {
public static void main(String[] args) {
SpringApplication.run(NavWebApplication.class, args);
}
}
SpringApplication
它其实不是Spring里有的东西,换言之,它是SpringBoot带来的新的类,SpringApplication
里面封装了一套Spring应用的启动流程。
一般来说,默认的SpringApplication
执行流程已经可以满足大多数需求,如果用户想要获得更多的自主权,可以通过Set方法注入相应的拓展。
@SpringBootApplication
public class NavWebApplication {
public static void main(String[] args) {
// SpringApplication.run(NavWebApplication.class, args);
SpringApplication app = new SpringApplication(NaWebApplication.class);
app.setXXX( ... );
app.run( args);
}
}
SpringApplication实例初始化
@SuppressWarnings({ "unchecked", "rawtypes" })
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
this.webApplicationType = WebApplicationType.deduceFromClasspath();
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
this.mainApplicationClass = deduceMainApplicationClass();
}
步骤分析:
deduceFromClasspath()
推断应用类型。setInitializers()
setListeners()
deduceMainApplicationClass()