Springboot启动流程-持续记录中

发布时间:2023年12月29日

注:转载请携带本文链接及公众号信息

公众号: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 参数用于指定应用程序的资源加载器。资源加载器负责加载应用程序中的各种资源,如配置文件、模板文件等。这个参数允许你自定义资源加载的策略

  1. 主要源(Primary Sources):
    ○ primarySources 参数是一个可变参数,用于指定主要的源。主要的源通常是指包含 main 方法的类,即应用程序的入口点。这些类将用于启动 Spring Boot 应用程序上下文。
  2. Web 应用程序类型(WebApplicationType):
    ○ WebApplicationType 用于指定应用程序的类型,即它是一个普通的应用程序、一个 Web 应用程序还是一个响应式的 Web 应用程序。该类型是通过检查类路径上的相关类来推断的。
  3. Bootstrap 注册表初始化器(BootstrapRegistryInitializer):
    ○ bootstrapRegistryInitializers 是一个用于初始化 Bootstrap 注册表的初始化器列表。Bootstrap 注册表是 Spring 框架引导过程的一部分,用于注册一些基础设施的组件。
  4. 应用程序上下文初始化器(ApplicationContextInitializer):
    ○ 通过 getSpringFactoriesInstances(ApplicationContextInitializer.class) 获取应用程序上下文初始化器的实例,并将其设置为应用程序的初始化器。
  5. 应用程序监听器(ApplicationListener):
    ○ 通过 getSpringFactoriesInstances(ApplicationListener.class) 获取应用程序监听器的实例,并将其设置为应用程序的监听器。
  6. 主应用程序类(Main Application Class):
    ○ mainApplicationClass 是通过 deduceMainApplicationClass() 方法推断出的主要应用程序类。这个类通常是包含 main 方法的类,它被用于启动 Spring Boot 应用程序

觉得有帮助
请关注下公众号:coderlike
每日分享热门技术/代码黑科技/动手实现各类中间件

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_25652949/article/details/135294860
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。