【SpringBoot】SpringBoot的运行原理

news2024/11/14 5:22:57

 SpringBoot项目中都有一个如下的启动类。


@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class,args);
    }
}

其中@SpringBootApplication是这个启动类的核心注解,在它下面又有三个子注解如下:

  1. @SpringBootConfiguration:配置当前启动类为Bean
  2. @EnableAutoConfiguration:自动扫描所有启动器依赖中的配置类。
  3. @ComponentScan:自动扫描启动类所在的包及其子包下使用了@Bean注解的类及其方法。

其中@EnableAutoConfiguration这个注解也是比较核心的。

  • @EnableAutoConfiguration 借助自己的一个子注解@Import 的帮助,将所有符合自动配置条件的 bean 定义加载到 IoC 容器。

而main中SpringApplication.run()的作用主要有两个

  1. 创建SpringApplication对象:进行相关资源的加载,解析@SpringBootApplication注解。
  2.  调用的是创建的SpringApplication对象的run方法,然后使用资源并启动Tomcat。

 下面介绍一下SpringBoot启动的全过程(部分),如下图所示。

看源码如下:

 

 

之后run方法会遍历这个List集合中的类路径信息。并反射调用类对象,完成Bean的配置。

然后就会用到我们的yml文件了

 稀里糊涂的写完了。。。。。。

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

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

相关文章

Spring Cloud Gateway动态路由及路由插件实现方案

前言 sim-framework之前使用Zuul作为网关,结合Eureka实现了动态路由及灰度路由,但是存在以下几个问题: 性能问题:Zuul基于线程隔离,一个请求需要一个线程处理,而Gateway基于事件驱动,少量线程…

Go项目布局

Go项目布局,自举语言,源码是靠Go自己实现的 所以Go源码可以参考作为项目布局 源码放在src目录下 cmd放main internal目录下放不希望外部访问的代码(业务) common目录下可以放直接 import外部访问的 etc放配置文件yaml

第二届海南大数据创新应用大赛 - 算法赛道冠军比赛攻略_海南新境界队

关联比赛: 第二届海南大数据创新应用大赛 - 智能算法赛 第二届海南大数据创新应用大赛 - 算法赛道冠军比赛攻略 首先很幸运能拿到这次初赛冠军,本着积极学习和提升自我的态度,团队成员通力合作是获胜关键,再次感谢。 赛题背景分析和理解 …

gpio的使用----->4412的裸机的使用(第三节)

这一节主要是 4412 的裸机的使用 0 4412 的硬件原理图 数据手册 然后是数据手册的解析: 每一组都有这几个 寄存器。 需要注意: 1、 4412 的中断是 与输入,输出在同一个级别的,与stm32不同。 2、 我是在uboot 上进行编程的&#x…

重头开始嵌入式第二十二天(Linux系统编程 进程)

进程 目录 进程 1.进程的概念 2.PCB(process control block) 3.进程和程序有什么区别? 4.进程的内存分布 5.进程的分类 守护进程 6.进程的作用 7.进程的状态 8.进程的调度 9.查询进程的相关指令 1.ps aux 2.top 3.kill和killa…

12 Text 组件

12 Text 组件 Tkinter 是 Python 的标准 GUI 库,而 Text 组件是其中用于显示和编辑多行文本的控件。以下是对 Text 组件的详细说明和一个使用案例。 Text 组件属性 基本属性 width: 文本框的宽度,通常以字符数为单位。height: 文本框的高度&#xff…

亚世光电:消费电子年度表演

机圈风云再起,消费电子乘风而起? 今天我们来聊——亚世光电 最近,华为mate60突然降价,被大家怀疑是为新品上市做准备,算算时间,下半年的消费电子大战也即将拉开帷幕,而亚世光电所在的光电显示领…

sklearn-线性回归

文章目录 一、sklearn-线性回归介绍二、线性回归1.一元线性回归2.多元线性回归模型3.最小二乘法 三、一元线性回归应用1.导入库2.绘制散点图3.建立回归模型并进行训练4.模型评估与数据查看5.模型测试 四、多元线性回归应用1.导入库2.计算相关性3.数据预处理4.训练评估模型5.模型…

iOS 18.1 Beta 2评测:新变化与体验升级

苹果公司近日向开发者推送了iOS 18.1 Beta 2更新,这一版本基于beta1版本进行多个方面优化和改进,为用户带来了更加流畅和个性化的使用体验。作为一位热衷于体验新系统的用户,小编也是第一时间升级了Beta 2版本,并对其进行了全面的…

Java二十三种设计模式-状态模式(20/23)

本文深入探讨了状态模式,一种允许对象根据其内部状态变化而改变行为的软件设计模式。文章从定义、组成部分、实现方式、使用场景、优缺点分析、与其他模式的比较,到最佳实践和建议,全面介绍了状态模式的各个方面。通过Java语言的实现示例和实…

2024前端面试题-篇章一(个人向)

1.vue2生命周期(省略) 2.vue3生命周期(省略) 3.vue2页面生命周期与组件生命周期执行顺序: 一般是 页面先创建,然后准备再准备挂载,挂载的时候发现有组件再执行组件的生命周期,组件…

数字影像技术是如何改变我们看待世界的方式呢?

在当今的科技时代,数字影像技术正以惊人的速度改变着我们的生活和视觉体验。那么,什么是数字影像技术呢? 数字影像技术是指通过数字化手段对图像和视频进行获取、处理、存储、传输和展示的一系列技术。 它利用各种数字设备,如数…

msf+proxychains组合搭建socks5隧道 | 内网穿透

实验环境 网络拓扑: kali: VMnet1(公网)192.168.52.134 win10: VMnet1(公网)192.168.52.135VMnet2(内网)192.168.72.133 win2008: VMnet2&#xff08…

【数据结构初阶】二叉树--基本概念

hello! 目录 一、树 1.1 树的概念和结构 1.2 树的相关术语 1.3 树的表示 1.4 树形结构实际应用场景 二、二叉树 2.1 概念和结构 2.2 特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 2.3 二叉树的存储结构 2.3.1 顺序结构 2.3.2 链式结构 …

转行到大模型,完整版攻略从大模型零基础到大模型精通,我是这样过来的

在当今这个日新月异的时代,技术的更新迭代速度远超我们的想象。对于那些渴望在职业生涯中寻求新挑战的人来说,转向人工智能领域,尤其是投身于大规模语言模型的研究与开发,无疑是一个充满机遇的选择。本文将为您揭示如何从零开始&a…

阿里十万卡训练集群 网络拓扑架构和优势 Alibaba HPN: A Data Center Network for Large Language Model Training

本博客的视频教程在这: 2.2阿里十万卡集群 网络拓扑架构和优势 Alibaba HPN: A Data Center Network for Large Language Model_哔哩哔哩_bilibili 一、大模型训练的核心问题 1.1 流量模式的问题 大语言模型训练的流量模式问题可参考这个: ECMP等价…

Linux 服务器下非root用户安装CUDA完整流程(多次踩雷经验总结)

参考博客: linux下安装cuda和cudnn(非root权限)_cuda下载安装 远程服务器 linux-CSDN博客 Linux下非root用户安装CUDA_linux下cuda-toolkit-archive-CSDN博客 非root用户安装cuda10.1,以及CUDA不同版本间切换_非root用户.run文…

已解决centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方案

出现cannot find a valid baseurl for repo:base/7/x86_64错误通常是由于YUM仓库源无法找到或无法访问,导致YUM无法正常工作。这种情况常见于CentOS 7系统。解决这个问题需要检查几个方面,如网络连接、DNS设置和YUM仓库源配置。 🧑 博主简介&…

aspose-words中插入附件及遇到的问题

aspose-words版本:21.1 java:1.8 目标: 前端使用tinymce编辑一段内容,后端使用aspose-words将html转为word,并将html中的附件转换为word中的附件。 形如: 实现方案: 使用正则表达式找出需要替…

setData的 Qt::CheckStateRole是model中checkbox的状态(选中否)

checkbox的状态 bool MissionModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (role Qt::CheckStateRole && col 3 ) { } }