【hbz分享】-springboot启动时做了哪些事情

news2024/9/27 12:18:25

spring启动类启动时的流程

先调用SpringApplication完成一系列初始化操作

  1. 先把启动类保存起来,就是带有main函数的那个类,把这个保存起来
  2. 保存应用类型,是Servlet还是Ractive
  3. 通过getSpringFactoriesInstances(BootstrapRegistryInitializer.class)获取工厂实例来获取bootstrapRegistryInitializers即bootstrap注册初始化器(透漏下,这块会返回0,即在spring.factories找不到这个类)
  4. 通过getSpringFactoriesInstances(ApplicationContextInitializer.class)获取工厂实例来获取应用上下文初始化器
  5. 通过getSpringFactoriesInstances(ApplicationListener.class)获取工厂实例来获取应用程序监听器
  6. 推断并配置项目main函数的主程序启动类

扩展:getSpringFactoriesInstances()方法是通过工厂实例,并且传参是对应的【类.class】,而getSpringFactoriesInstances()中,第一次进入会去扫描spring-boot-autoconfig项目下的spring.factories文件下所有的配置类,以后会直接从map中获取对应配置类,并添加到一个map集合作为缓存,然后去看有没有参数对应的类,如果有就初始化,如果没有就返回null

源码截图:
在这里插入图片描述

紧接着调用run(), 衔接上面的步骤:

  1. 创建一个引导对象上下文BootstrapContext,用来保存上下文参数信息
  2. 配置系统环境变量,就是我们配置的那些环境变量,JVM参数等
  3. 调用getSpringFactoriesInstances(SpringApplicationRunListener.class, argumentResolver);获取默认启动时需要用到的对应监听器,由于在SpringApplication构造方法中已经把spring.factories内容加载到了内存,所以这里再次调用直接从map集合找
  4. 通知所有监听器,启动应用程序,就是遍历循环,一个个启动监听器。
  5. 封装一下应用程序参数: 比如server.port这些配置的参数
  6. 创建应用程序上下文context
  7. 配置应用程序启动方式
  8. 准备上下文, 即把之前的获取的【启动器】【环境变量】【监听器】等等一些东西传给上下文
  9. 结束,打印启动时间

综合总节

  1. 初始化SpringApplication, 运行SpringApplication的run方法
  2. 读取spring,factories的多个初始化监听器,并拉取到map中作为缓存
  3. 配置项目中的环境变量,JVM配置信息,配置文件等信息
  4. 预初始化环境,创建环境对象
  5. 创建Spring容器对象ApplicationContext
  6. 调用spring的refresh加载IOC, 自动装配类,并创建bean等信息
  7. 调用很多监听器并传第给上下文对象
  8. 运行相关runner

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

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

相关文章

<数据集>战斗机识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:7903张 标注数量(xml文件个数):7903 标注数量(txt文件个数):7903 标注类别数:43 标注类别名称:[F16, Mig31, F35, F18, SR71, A10, A400M, AG600, J20, F4, C17, Tor…

C语言程序设计之基础易错题锦集2

C语言程序设计之基础易错题锦集2 自加自减代码2_0_1运行结果2_0_1代码2_0_2运行结果2_0_2 问题2_1解答2_1 问题2_2结果2_2 问题2_3结果2_3 问题2_4结果2_4 问题2_5结果2_5 问题2_6结果2_6 自加自减 代码2_0_1 #include<stdio.h>main(){int a,b,c,d;abcd10;printf("…

【枚举 图论】2242. 节点序列的最大得分

本文涉及知识点 枚举 图论知识汇总 LeetCode 2242. 节点序列的最大得分 给你一个 n 个节点的 无向图 &#xff0c;节点编号为 0 到 n - 1 。 给你一个下标从 0 开始的整数数组 scores &#xff0c;其中 scores[i] 是第 i 个节点的分数。同时给你一个二维整数数组 edges &…

区分虚拟网卡和物理网卡

枚举注册表网卡信息 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}读取没一项的Characteristics、NetCfgInstanceId信息Characteristics & NCF_PHYSICAL 即为物理网卡 Characteristics值 类型值说明NCF_VIRTUAL0x01…

STM32L051K8U6-HAL-LED闪烁设计

HAL三步法&#xff1a; 1、配置下载线 2、配置晶振 3、配置时钟 注意&#xff1a;中断优先级&#xff08;这里防止HAL_Delay卡死&#xff0c;详细请看 http://t.csdnimg.cn/NQhQV&#xff09; 4、 配置灯引脚属性为输出模式。并设置标签为LED 生成代码&#xff1a;编写while里…

《关于触手 AI 图像合成算法的分析报告》

一、算法全周期行为分析 算法安全 信息内容安全&#xff1a;在图像生成过程中&#xff0c;需要确保所生成的图像内容不包含违法、有害、侵犯他人权益或违反道德规范的信息。例如&#xff0c;不能生成涉及暴力、色情、恐怖主义等内容的图像。信息源安全&#xff1a;对于输入的原…

警惕智能手机的“隐形眼”:如何保护我们的数字隐私堡垒

随着智能手机深入我们生活的方方面面&#xff0c;它变得无所不在&#xff0c;甚至无所不知。 但你是否意识到&#xff0c;你的手机可能正在悄无声息地“监听”你的一举一动&#xff1f; 从你的搜索习惯到日常对话&#xff0c;手机的个性化推荐系统正不断收集你的数据。 本文…

参考图片神器《PureRef》,带下载。

画画、建模或者做设计看参考时&#xff0c;是否经常为不能同时共存两个页面而苦恼。 今天就给大家推荐一个能解决这个问题得软件——PureRef 下载地址&#xff1a;PureRef 2.0汉化版 汉化版2.0 蓝奏云&#xff1a; https://wwz.lanzouq.com/iyUTy1zt2b4d 下面是一些软件快…

UWA Gears兼容性数据公开

UWA最新发布了无SDK性能分析工具 - UWA Gears。该工具能够实时监测应用的CPU和GPU性能&#xff0c;无需代码改动即可掌握性能动态。此外&#xff0c;Gears还能截取应用的渲染画面进行深度分析&#xff0c;帮助您快速找到性能瓶颈并进行精准优化。 本篇内容为开发者提供了Gears…

【LVS】防火墙标签解决轮询错误

实验&#xff1a; 测试&#xff1a; 实验&#xff1a; 两个服务端下载软件在重启httpd lvs 标记多端口 多端口自动识别 测试 防火墙标记解决轮回问题

关于IAR的ICF编程操作

最近有一个项目需要对ICF进行外部编程。两个工程引用相同的ICF&#xff0c;通过外部输入参数来区分内部的地址范围。通过相关资料的研究&#xff0c;cmake可以通过参数导入一个变量来就觉这个问题。后来参考IAR手册发现可以在IDE中定义. 例子&#xff1a; icf文件&#xff1a…

Java Kafka消费者组位移重设深度解析与实践

简介 在现代的分布式系统中&#xff0c;消息队列扮演着至关重要的角色。Apache Kafka&#xff0c;以其高吞吐量、高可靠性和优秀的容错性&#xff0c;成为了众多企业的首选消息系统。在使用Kafka过程中&#xff0c;消费者组位移的管理是一个常见且关键的议题。本文将深入探讨K…

Excel中的高效查找利器:VLOOKUP函数深度解析与应用实战

文章目录 前言一、VLOOKUP基础应用二、常见用法1.精确匹配2.近似匹配3.反向查找4.多条件查找5.屏蔽错误值6.关键字查找&#xff08;模糊查找&#xff09;7.文本数值混合查找8.去除空格查找 前言 VLOOKUP函数是Excel中用于在数据表中进行垂直查找的强大工具。它能根据用户指定的…

html+css+js网页设计 中国电信1个页面(带js)

htmlcssjs网页设计 中国电信1个页面&#xff08;带js&#xff09; 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xf…

Android 文件上传与下载

在实际开发涉及文件上传不会自己写上传代码&#xff0c;一般 会集成第三网络库来做图片上传&#xff0c;比如android-async-http&#xff0c;okhttp等&#xff0c;另外还有七牛也提供 了下载和上传的API。 1.项目用到的图片上传的关键方法&#xff1a; 这里用到一个第三方的库…

ChatGPT辅助论文写作各阶段提示词分享

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 随着人工智能技术的迅速发展&#xff0c;ChatGPT作为一种强大的语言模型&#xff0c;已经在各个领域展现出其独特的应用价值。在学术论文写作过程中&#xff0c;ChatGPT不仅可以帮助研究…

细节持续跟新

1.input的自带光标如何去除 2.阻止事件冒泡 3.获取父亲兄弟的innertext 4.画表格 参考博主链接 前端-HTML表格制作_哔哩哔哩_bilibili 美化

[CSCCTF 2019 Qual]FlaskLight (jinja2模版注入)

两种方法&#xff1a; 1.工具法 进来看见flask到处飘&#xff0c;估计就是ssti ctrlU打开发现两行注释提示GET方式传递参数search 这种有参数的我先直接丢fengjing扫了一下&#xff0c;结果还真搞出来&#xff0c;这工具还是挺牛的&#xff0c;就是没参数的时候搞不了 fengj…

在 Ubuntu 24.04 LTS 上安装 MySQL 8

1. 更新系统软件包 在开始安装 MySQL 之前&#xff0c;确保你的系统软件包是最新的。 sudo apt update sudo apt upgrade -y 2. 添加 MySQL APT 存储库 首先&#xff0c;下载 MySQL APT 存储库的包&#xff1a; wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1…

软件工程_软件过程模型__20240806

1:软件过程模型 1.11:敏捷方法 敏捷方法-XP 四大价值观 沟通[加强面对面沟通] 简单[不过度设计] 反馈[及时反馈] 勇气[接受变更的勇气]12条过程实践规则 简单设计 测试驱动 代码重构 结对编程 持续集成 现场客户 发行版本小型化 系统隐喻 代码集体所有制 规划策略 规范代码…