Springboot启动流程-持续记录中

news2024/11/25 6:30:27

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

公众号: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
每日分享热门技术/代码黑科技/动手实现各类中间件

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1343254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rime中州韵 自定义词典

在使用 rime 输入法的过程&#xff0c; 我们往往会需要增加一些个个性化的词条&#xff0c;这些词条我们可能通过自定义词典的方式来管理和使用。 Custom_phrase.txt 首先&#xff0c;我们需要有一个词典文档&#xff0c;这里我们把 Custom_phrase.txt 文档作为我们的自定义文…

c语言-string.h库函数初识

目录 前言一、库函数strlen()1.1 strlen()介绍1.2 模拟实现strlen() 二、库函数strcpy()2.1 strcpy()介绍2.2 模拟实现strcpy() 三、库函数strcmp()3.1 strcmp()介绍3.3 模拟实现strcmp() 总结 前言 本篇文章介绍c语言<string.h>头文件中的库函数&#xff0c;包含strlen…

汽车电子喇叭,预计未来几年全球市场将以显着的速度增长

根据最近的市场研究报告&#xff0c;预计未来几年全球汽车电子喇叭市场将以显着的速度增长。这种增长是由对汽车高级安全系统的需求不断增加以及电动汽车 (EV) 和混合动力电动汽车 (HEV) 的日益普及所推动的。此外&#xff0c;智慧城市的发展和对车对车&#xff08;V2V&#xf…

CEC2017(Python):五种算法(HHO、RFO、OOA、PSO、GWO)求解CEC2017

一、5种算法简介 1、哈里斯鹰优化算法HHO 2、红狐优化算法RFO 3、鱼鹰优化算法OOA 4、粒子群优化算法PSO 5、灰狼优化算法GWO 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem d…

Python 操作 MySQL:使用 mysql-connector-python 操作 MySQL 数据库

大家好&#xff0c;我是水滴~~ 当涉及到使用 Python 操作 MySQL 数据库时&#xff0c;mysql-connector-python 库是一个强大而常用的选择。该库提供了与 MySQL 数据库的交互功能&#xff0c;使您能够执行各种数据库操作&#xff0c;如连接数据库、执行查询和插入数据等。在本文…

余弦相似度算法

余弦相似度算法 是什么 余弦距离&#xff0c;也称为余弦相似度&#xff0c;是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。 余弦值越接近1&#xff0c;就表明夹角越接近0度&#xff0c;也就是两个向量越相似&#xff0c;这就叫"余弦相似性&q…

PBR纹理贴图类型详解

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 PBR 纹理是一种帮助 3D 艺术家使他们的 3D 渲染看起来更逼真的技术。…

k8s搭建(四、k8s集群创建)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

ROS仿真R2机器人之安装运行及MoveIt的介绍

R2(Robonaut 2)是NASA美国宇航局与GM通用联合推出的宇航人形机器人&#xff0c;能在国际空间站使用&#xff0c;可想而知其价格是非常昂贵&#xff0c;几百万美刀吧&#xff0c;还好NASA发布了一个R2机器人的Gazebo模型&#xff0c;使用模型就不需要花钱了&#xff0c;由于我们…

Kubernetes网络-VXLAN

一. 网络基础 1. 计算机网络的分层 如今连接方式也越来也丰富&#xff0c;网线、WiFi、蓝牙、光纤&#xff0c;甚至我们普通的电线、照明所用的灯光&#xff0c;都可以作为接入网络的介质。如此庞大的网络&#xff0c;丰富多样的设备&#xff0c;计算机网络技术能把它们统一起…

js对象方法大全(开发必会)

目录 前言 assgin(对象合并) 参数 功能 返回值 测试 结果 结论 create(以源对象为原型创建新对象) 参数 功能 返回值 测试 结果 结论 defineProperties(对属性进行具体定义) 参数 功能 返回值 测试 结果 结论 defineProperty(重写或定义新属性) 参数 功…

Google Play上架:2023年度总结报告

今天是2023年的最后一个工作日&#xff0c;今天用来总结一下2023年关于谷歌商店上架的相关政策改动和对应的拒审解决方法。 目录 政策更新与改动2023 年 2 月 22 日2023 年 4 月5 日2023 年 7 月 12 日2023 年 10 月 25 日 开发者计划政策拒审邮件内容和解决办法 政策更新与改…

【Linux】深挖进程地址空间

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟悉【Linux】进程地址空间 > 毒鸡汤&#xff…

模糊-神经网络控制 原理与工程应用(绪论)

模糊—神经网络控制原理与工程应用 绪论 模糊和确定系统 在客观世界中&#xff0c;系统可分为确定性系统和模糊性系统&#xff0c;前者可用精确数学模型加以描述&#xff0c;而后者则不能。 输入输出类型 &#xff08;&#xff42;&#xff09;的模糊性输出可通过反模糊化转换…

一招搞定msvcr100.dll缺失问题,msvcr100.dll丢失的多种解决方法

msvcr100.dll是Microsoft Visual C 2010 Redistributable Package的一部分&#xff0c;它是运行许多基于Windows操作系统上的应用程序所必需的动态链接库文件。如果该文件安装不正确、丢失或损坏&#xff0c;则使用该文件的应用程序将无法正常启动&#xff0c;会出现“无法启动…

做抖店的话营业执照要办什么类型?法人必须是本人信息?问题解答

我是王路飞。 想在抖音开店的新手&#xff0c;好像对抖音个人店有一种迷之追求。 先劝告你们一句&#xff0c;贪小便宜容易吃大亏。 抖音个人店并不适合新手开通&#xff0c;它重在“试运营”这三个字&#xff0c;新手不仅无法正常把店铺做起来&#xff0c;而且后续还要把对…

React实现拖拽效果

基于 React 的拖拽效果 Demo 一个基于 React 的拖拽功能实现的 Demo. 两个关键点 1, draggable 属性 2, drag 事件 draggable 属性 img 标签默认是支持拖拽的, 当时其他 HTML 标签, 想要其拖动的话, 需要为其添加 draggable“true” 属性 drag 事件 drag 相关的事件有:…

Android Camera

1. 相关的API Android有三套关于摄像头的API(库)&#xff0c;分别是Camera、Camera2和CameraX&#xff0c;其中Camera已废弃&#xff0c;在Android5.0以后推荐使用Camera2和CameraX&#xff0c;Camera2推出是用来替换Camera的&#xff0c;它拥有丰富的API可以为复杂的用例提供…

【Redis交响乐】Redis中的通用命令

文章目录 1. 基本命令 get set2. 全局命令(1)keys(2)exists(3)del(4)expire && ttl面试题: redis中key的过期策略是怎么实现的?定时器的实现原理(1)基于优先级队列/堆(2)基于时间轮实现的定时器 (5) type 我们知道,redis是按照键值对的方式存储数据的. Redis中基本的命…

这本书没有一个公式,却讲透了数学的本质!

这本书没有一个公式&#xff0c;却讲透了数学的本质&#xff01; 《数学的雨伞下&#xff1a;理解世界的乐趣》。一本足以刷新观念的好书&#xff0c;从超市到对数再到相对论&#xff0c;娓娓道来。对于思维空间也给出了一个更容易理解的角度。 作者&#xff1a;米卡埃尔•洛奈…