springboot源码理解五、SpringApplication初始化


springboot版本:2.2.9.RELEASE。

main

在这里插入图片描述
SpringApplication#run(java.lang.Class<?>, java.lang.String…)
在这里插入图片描述

SpringApplication#run(java.lang.Class<?>[], java.lang.String[])
在这里插入图片描述
我们注意这里的new SpringApplication(primarySources)

new SpringApplication(primarySources)

初始化SpringApplication

SpringApplication#SpringApplication(java.lang.Class<?>…)
在这里插入图片描述

SpringApplication#SpringApplication(org.springframework.core.io.ResourceLoader, java.lang.Class<?>…)
在这里插入图片描述

public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
	// 资源加载器设置为null
	this.resourceLoader = resourceLoader;
	
	// 加载类资源不能为null
	Assert.notNull(primarySources, "PrimarySources must not be null");
	
	// 将数组primarySources转换为List,放入LinkedHashSet里。
	this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
	
	// 推断应用类型,当前项目为WebApplicationType.SERVLET。
	this.webApplicationType = WebApplicationType.deduceFromClasspath();
	
	// 加载classpath下(项目中),META-INF\spring.factories中配置的ApplicationContextInitializer。
	setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
	
	// 加载META-INF\spring.factories中配置的ApplicationListener。
	setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
	
	// 根据调用栈推断main方法主类
	this.mainApplicationClass = deduceMainApplicationClass();
}

setInitializers

加载classpath下(项目中),META-INF\spring.factories中配置的ApplicationContextInitializer。
初始化器类

SpringApplication#getSpringFactoriesInstances(java.lang.Class)
在这里插入图片描述
SpringApplication#getSpringFactoriesInstances(java.lang.Class, java.lang.Class<?>[], java.lang.Object…)

SpringFactoriesLoader.loadFactoryNames这个方法我们在:自动配置(第三方依赖中的bean),中讲到过,
作用就是加载META-INF\spring.factories的信息。
在这里插入图片描述
在这里插入图片描述

setListeners

加载META-INF\spring.factories中配置的ApplicationListener。
监听器
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值