注:转载请携带本文链接及公众号信息
公众号:codelike
基于springboot2.6.x 源码
启动入口方法是new SpringApplication.run(),一切的开始都从这里
这里做了什么呢 分为初始化SpringApplication实体、执行run()方法
构造方法
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
//resourceLoader资源加载器,一般传入都是null
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
//主源集合 也就是我们的启动类
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
//推断程序类型,根据引入的包,推断出程序类型
//类型分为三类: NONE:非web程序,SERVLET:web程序,REACTIVE:响应式web程序
this.webApplicationType = WebApplicationType.deduceFromClasspath();
//去spring.factories里找BootstrapRegistryInitializer的实现类
this.bootstrapRegistryInitializers = new ArrayList<>(
getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
//设置默认的初始化器 比如SharedMetadataReaderFactoryContextInitializer等
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
//设置默认的监听器 比如EnvironmentPostProcessorApplicationListener等
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
//我们自己的启动类本身
this.mainApplicationClass = deduceMainApplicationClass();
}
资源加载器(ResourceLoader)
● resourceLoader 参数用于指定应用程序的资源加载器。资源加载器负责加载应用程序中的各种资源,如配置文件、模板文件等。这个参数允许你自定义资源加载的策略
觉得有帮助
请关注下公众号:coderlike
每日分享热门技术/代码黑科技/动手实现各类中间件