注:转载请携带本文链接及公众号信息
公众号:codelike
基于springboot2.6.x 源码
Springboot启动之第一篇 SpringApplication构造器
启动入口方法是new SpringApplication.run(),一切的开始都从这里
这里做了什么呢 分为初始化SpringApplication实体、执行run()方法
构造器 new SpringApplication()
构造方法
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 参数用于指定应用程序的资源加载器。资源加载器负责加载应用程序中的各种资源,如配置文件、模板文件等。这个参数允许你自定义资源加载的策略
- 主要源(Primary Sources):
○ primarySources 参数是一个可变参数,用于指定主要的源。主要的源通常是指包含 main 方法的类,即应用程序的入口点。这些类将用于启动 Spring Boot 应用程序上下文。 - Web 应用程序类型(WebApplicationType):
○ WebApplicationType 用于指定应用程序的类型,即它是一个普通的应用程序、一个 Web 应用程序还是一个响应式的 Web 应用程序。该类型是通过检查类路径上的相关类来推断的。 - Bootstrap 注册表初始化器(BootstrapRegistryInitializer):
○ bootstrapRegistryInitializers 是一个用于初始化 Bootstrap 注册表的初始化器列表。Bootstrap 注册表是 Spring 框架引导过程的一部分,用于注册一些基础设施的组件。 - 应用程序上下文初始化器(ApplicationContextInitializer):
○ 通过 getSpringFactoriesInstances(ApplicationContextInitializer.class) 获取应用程序上下文初始化器的实例,并将其设置为应用程序的初始化器。 - 应用程序监听器(ApplicationListener):
○ 通过 getSpringFactoriesInstances(ApplicationListener.class) 获取应用程序监听器的实例,并将其设置为应用程序的监听器。 - 主应用程序类(Main Application Class):
○ mainApplicationClass 是通过 deduceMainApplicationClass() 方法推断出的主要应用程序类。这个类通常是包含 main 方法的类,它被用于启动 Spring Boot 应用程序
觉得有帮助
请关注下公众号:coderlike
每日分享热门技术/代码黑科技/动手实现各类中间件