专栏目录
1-SpringBoot架构设计与实现原理-SpringBoot设计与特性
2-SpringBoot架构设计与实现原理-SpringBoot注解原理
3-SpringBoot架构设计与实现原理-自动装配底层原理和手写自动装配
4-SpringBoot架构设计与实现原理-SpringBoot自定义starter
5-SpringBoot架构设计与实现原理-SpringBootApplication运行原理剖析
SpringBootApplication运行原理剖析
剖析SpringApplication
SpringApplication 基本使用
SpringApplication.run(DiveInSpringBootApplication.class, args)
通过 SpringApplication API 调整
SpringApplication springApplication = new SpringApplication(DiveInSpringBootApplication.class);
springApplication.setBannerMode(Banner.Mode.CONSOLE);
springApplication.setWebApplicationType(WebApplicationType.NONE);
springApplication.setAdditionalProfiles("prod");
springApplication.setHeadless(true);
通过 SpringApplicationBuilder API 调整
new SpringApplicationBuilder(DiveInSpringBootApplication.class)
.bannerMode(Banner.Mode.CONSOLE)
.web(WebApplicationType.NONE)
.profiles("prod")
.headless(true)
.run(args);
源码解读
public class SpringApplication {
//setp1:入口
public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
return new SpringApplication(primarySources).run(args);
}
//setp2:构造方法
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();
// 初始化 initializers 属性
// goto 3
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
// 初始化 listeners 属性
setListene