SpringBoot的启动原理

  1. 运行Main方法: 应用程序启动始于Main方法的执行。在Main方法中,创建了一个SpringApplication实例,用于引导应用程序的启动。同时,SpringApplication会根据spring.factories文件加载并注册监听器、ApplicationContextInitializer等扩展接口实现。
  2. 运行run方法: 运行SpringApplication的run方法是应用程序启动的入口。在这一步,Spring Boot会 启动Spring进而创建内置tomcat,进去run方法后还做了很多其他事:
  3. Spring Boot会读取和解析环境变量、配置文件(如application.propertiesapplication.yml)等,以获取应用程序的配置信息。
  4. 之后再创建ApplicationContext也就是我们熟知的Spring上下文: 在这一步,Spring Boot会根据应用程序的类型(例如,Web应用程序)创建相应的ApplicationContext。对于Web应用程序,通常创建的是ServletWebServerApplicationContext
  5. 预初始化上下文: Spring Boot会将启动类作为配置类,读取并注册为BeanDefinition,这使得Spring容器可以识别应用程序的配置。
  6. 调用refresh: 此时,Spring Boot调用了refresh方法来加载和初始化Spring容器。在这一过程中,会执行一系列操作,包括解析@Import注解以加载自动配置类,创建和注册BeanDefinition等。
  7. 创建内置servlet容器: 如果应用程序是一个Web应用程序,Spring Boot会在这一步创建内置的servlet容器(例如Tomcat),以便应用程序可以接受HTTP请求。这个容器将被Spring Boot自动配置,并且可以通过配置进行自定义。
  8. 监听器和扩展点: 在整个启动过程中,Spring Boot会调用各种监听器和扩展点,这些组件可以用来对应用程序进行扩展和定制。例如,您可以使用监听器来处理应用程序启动和关闭事件,或者使用ApplicationContextInitializer来自定义ApplicationContext的初始化。

总的来说,Spring Boot的启动过程是一个复杂的流程,它从Main方法开始,经过一系列步骤来初始化Spring容器和启动内置tomcat。

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

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

相关文章

flinksql

Flink SQL 是 Apache Flink 项目中的一个重要组成部分,它允许开发者使用标准的 SQL 语言来处理流数据和批处理数据。Flink SQL 提供了一种声明式的编程范式,使得用户能够以一种简洁、高效且易于理解的方式来表达复杂的数据处理逻辑。 ### 背景 Flink SQL 的设计初衷是为了简…

Flutter Getx介绍

GetX 是 Flutter 上的一个轻量且强大的解决方案, Getx为我们提供了高性能的状态管理、智能的依赖注入和便捷的路由管理。以下视频对Flutter Getx做了全面的介绍。 51 【Getx 试听】Flutter Getx 状态管理介绍、Getx介绍 、Getx Dialog 主题管理 GetX 有3个基本原则…

AD7982BRMZRL7 二进制 500kSPS 模数转换芯片 ADI

AD7982BRMZRL7是一款由Analog Devices(亚德诺)公司生产的18位逐次逼近型模数转换器(ADC)。它主要用于将模拟信号转换为数字信号,适用于数据采集系统、嵌入式系统、工业控制和医疗设备等领域。 AD7982BRMZRL7的主要功能…

redis-缓存穿透与雪崩

一,缓存穿透(查不到) 在默认情况下,用户请求数据时,会先在缓存(Redis)中查找,若没找到即缓存未命中,再在数据库中进行查找,数量少可能问题不大,可是一旦大量的请求数据&a…

RocketMQ从安装、压测到运维一站式文档

1 RocketMQ下载方式 1.1 官网下载 下载地址 source是源码,Binary是可运行程序。 1.2 网盘下载 版本: 4.7.1版本的 source下载: 链接: https://pan.baidu.com/s/1d8FuAicxSr-YZKeeQJ7jWg 提取码: t24m Binary下载: 链接: …

python数据可视化——笔记1

1、pyecharts模块 Pyecharts 是一个 Python 可视化库,绘制多种类型的图表,创建交互式和美观图表。 官方网站:https://pyecharts.org/#/zh-cn/ pyecharts画廊: https://gallery.pyecharts.org/#/README 安装pyechart包,在pych…

MXnet安装 与入门 符号式运算 Symbol 数据同步 KVStore 自动并行计算 数据的导出与载入 NDArray基本运算 分布式训练 单变量线性回归

MXnet 参考 通过 MXNet / Gluon 来动手学习深度学习 在线 github pdf 代码 深度学习库 MXNet 由 dmlc/cxxnet, dmlc/minerva 和 Purine2 的作者发起, 融合了Minerva 的动态执行,cxxnet 的静态优化和 Purine2 的符号计算等思想,直接支持基于Python 的 parameter serve…

记录 RuoYi-Vue 项目集成 Sharding-JDBC 遇到的问题与解决办法

目录 前提说明环境需求背景 遇到的问题与解决办法问题1、LocalDateTime转换报错问题描述解决办法 问题2、初始化分表数据,数据量过大,造成内存溢出问题描述解决方法代码如下: 问题3、count()查询结果不正确问题描述解决方法代码如下&#xff…

界面控件DevExpress WinForms/WPF v23.2 - 富文本编辑器支持内容控件

众所周知内容控件是交互式UI元素(文本字段、下拉列表、日期选择器),用于在屏幕上输入和管理信息。内容控件通常在模板/表单中使用,以标准化文档格式和简化数据输入。DevExpress文字处理产品库(Word Processing Document API、WinForm和WPF富文…

Redis中的集群(三)

集群 槽指派 记录节点的槽指派信息。 clusterNode结构的slots属性和numslot属性记录了节点负责处理哪些槽: struct clusterNode { // ... unsigned char slots[16384/8];int numslots; // ... }slots属性是一个二进制位数组(bit array),这个数组的长度位16384/8…

centos 7 sshd服务无法自动随机启动

centos 7 sshd 服务无法伴随主机启动而启动&#xff0c;而使用systemctl start sshd可以启动&#xff0c;很奇怪。 后来使用Kimi查询&#xff0c;有提示“检查系统启动服务的顺序和状态” systemctl list-dependencies <service>确保所有依赖服务都已正常启动。 查看本…

2024年认证杯SPSSPRO杯数学建模C题(第一阶段)云中的海盐全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现&#xff1a; 巴黎气候协定提出的目标是&#xff1a;在 2100 年前&#xff0c;把全球平均气温相对于工业革命以前的气温升幅控制在不超过 2 摄氏度的水平&#xff0c;并为 1.5 摄氏度而努力。但事实上&#xff0c;许多…

Vue Router 路由生命周期钩子/路由导航守卫

文章目录 简介一、全局钩子二、路由独享的钩子三、组件内的钩子Vue 2 (Vue Router 3) 中Vue 3 (Vue Router 4)中 四、执行顺序五、错误处理Vue Router 4&#xff08;适用于 Vue 3&#xff09;中Vue Router 3&#xff08;适用于 Vue 2&#xff09;中 简介 Vue Router 提供了路由…

中仕公考:三支一扶期满后有编制吗?

三支一扶两年的期限到达之后&#xff0c;会自动获得编制吗? 完成三支一扶项目的服务期限后&#xff0c;参与人员必须通过正式的考试才能获得编制&#xff0c;而并不是期满后自动获得编制。但是&#xff0c;三支一扶服务期满人员在参加公务员考试中可依照其身份享受加分的优惠…

中国软件商业模式

很多IT技术人、风险投资人这些年进入SaaS产业&#xff0c;写了大量的文章来诊断中国软件产业。 我只是看过去十年的中国软件百强&#xff0c;这是事实上在中国这片土地上长出来并且跑出来的厂商。实践是检验一切真理的唯一标准。说美国怎么样怎么样&#xff0c;中国甲方企业和中…

QA测试开发工程师面试题满分问答12: 用户上传照片如何设计测试用例并进行测试

针对用户上传照片的功能&#xff0c;以下是一些从 QA 角度设计测试用例的示例&#xff0c;涵盖了前端功能点、后端功能点、缓存、异常处理、资源占用、并发和网络等维度&#xff1a; 前端功能点&#xff1a; a. 用户界面&#xff1a;验证上传照片的用户界面是否易于使用和导航&…

标准孔板简单适应性强

即使生活一地鸡毛&#xff0c;但仍然要觉得未来可期&#xff0c;做自己而不是解释自己&#xff0c;只要能变好&#xff0c;慢点又如何&#xff0c;愿我们都是苦尽甘来的人&#xff0c;熬得住就出众&#xff0c;熬不住就出局&#xff0c;鹤壁永成矿山&#xff0c;在行业坚持十余…

基于matlab动态化绘制一个彩色边框的爱心

一、版本1 % 定义爱心曲线的参数方程 t linspace(0, 2*pi, 100); x 16*sin(t).^3; y 13*cos(t) - 5*cos(2*t) - 2*cos(3*t) - cos(4*t);% 创建图形 figure; axis equal; axis off; title(爱心);% 循环遍历每个点&#xff0c;绘制不同颜色的线段 for i 1:length(t)-1% 清除…

Docker 镜像 用普通用户启动服务

Docker镜像内用普通用户启动服务 Docker是一种用于构建、封装和分发应用程序的开源平台。它利用容器化技术将应用程序及其依赖项打包到一个可移植的容器中&#xff0c;从而实现快速部署和可伸缩性。 在Docker中&#xff0c;通过使用Docker镜像可以创建容器&#xff0c;镜像是容…

Selenium+TestNG学习笔记

------------------TestNG-------------------- 1.层级 suite -》test-》class-》method 建议层级 class对应一个测试用例&#xff0c;suite对应一个测试集 2. testNG中的PO模式 3.运行多个测试类的测试用例 通过suite来进行管理;suite在testNG中可以通过xml 来进行编写管理…