Spring Boot 快速入门2 ——SpringBoot运行原理分析

一、SpringBoot运行原理

父依赖

我们再查看 Spring Boot 项目中 pom.xml 可以看出,所有的 Spring Boot 项目 直接或间接的 依赖于一个 父项目  spring-boot-starter-parent  ,主要是管理项目的资源及其插件。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
    <relativePath/> 
</parent>

进入到spring-boot-starter-parent,发现还有一个父依赖:

这个才是真正管理 Spring Boot 应用中所有依赖版本的地方,Spring Boot 的版本控制中心。

我们在导入依赖的时候,默认不需要写版本号,就是因为版本控制中心,但是如果导入的包没有在依赖中管理者,就需要手动去控制版本了。

二、tarter场景启动器

我们先来看一下 项目中 导入的依赖项:

spring-boot-starter-* :*就某种场景,只要引入starter,这个场景的所有常规需要的依赖我们都自动引入,所有的导入的依赖,底层都是 依赖于 spring-boot-starter

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <version>2.3.4.RELEASE</version>
  <scope>compile</scope>
</dependency>

spring-boot-starter-web:帮我们导入了web模块正常运行所依赖的组件。

        <!--该依赖就是我们在创建 SpringBoot 工程勾选的那个 Spring Web 产生的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

Spring Boot 将所有的场景全部整合起来,集成了一个个的 启动器 Starter, 我们只需要在项目中引入需要的 Starter 就行,所有相关的依赖就会导入进来,供我们使用,当然我们也可以自定义 Starter.

三、启动类

@SpringBootApplication 是 Spring Boot 框架中的一个核心注解,用于简化 Spring Boot 应用的配置。当你在一个类上使用了这个注解,它实际上是一个组合注解,包含了多个其他的 Spring 注解,用于自动配置和启用 Spring Boot 的一些特性。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
@SpringBootApplication
public class SpringBootDemoApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }
​
}
  • @SpringBootApplication: 作用在类上,说明被标注的类是 SpringBoot 的主启动类, Spring Boot 就会这个类的main 方法,

        注:@SpringBootApplication 注解作用的类 应该在所有包的上一级。

  • @SpringBootConfiguration: Spring的配置类注解,标注在某个类上,表示这是一个springboot 配置类 (复合注解)

    • @Configuration: 说明这是一个配置类,配置类就是对应 Spring 的 xml 配置文件。

    • @Component:说明启动类本身就是一个组件,用来负责启动应用。

  • @EnableAutoConfiguration:开启自动装配的注解

    • @AutoConfigurationPackage:用来自动装配的注解。

    • @Import({AutoConfigurationPackages.Registrar.class}) : 自动配置 ‘包组件’,Spring底层注解@import ,给容器中导入一个组件,Registrar.class 作用:将主启动类的所在包及包下面所有子包里面的所有组件扫描到Spring容器 

  • @Import({AutoConfigurationImportSelector.class}) :给容器导入组件,AutoConfigurationImportSelector :自动配置导入选择器

四、SpringApplication.run分析

SpringBootApplication.java

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

SpringBootApplication.run方法主要分两部分:

一部分是SpringApplication的实例化,二是run方法的执行。

SpringApplication这个类主要做了以下四件事情:

(1)推断应用的类型是普通的项目还是Web项目

(2)查找并加载所有可用初始化器 , 设置到initializers属性中

(3)找出所有的应用程序监听器,设置到listeners属性中

(4)推断并设置main方法的定义类,找到运行的主类

run方法流程分析:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年天津市安全员C证证模拟考试题库及天津市安全员C证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年天津市安全员C证证模拟考试题库及天津市安全员C证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;天津市安全员C证证模拟考试题库是根据天津市安全员C证最新版教材&#xff0c;天津市安全员C证大纲整理…

vant4的组件气泡弹出框van-popover,在列表中遍历后点击一个全部/显示隐藏,解决办法

环境&#xff1a;vue3 vant-ui4 <div v-for"(info, index) in item.infoListVOs" :key"index"><van-popoverv-model:show"showPopover":actions"actions"overlayplacement"bottom-end"select"onSelect(info…

yaml文件的介绍-K8S

yaml 文件是我们使用K8S管理应用程序常用的部署方式&#xff0c;它主要是通过一系列键值对组成&#xff0c;键和值使用冒号和空格分隔。以下是对yaml的介绍 首先我们可以使用命令生成一个简单的YAML模版文件 Kubectl run nginx-pod –imagenginx:latest –port80 –dry-runcli…

变工况下转子、轴承数据采集及测试

1.固定工况下的数据采集 1.wireshark抓包 通过使用 Wireshark 抓包和 Linux 端口重放技术&#xff0c;可以模拟实际机械设备的运行环境&#xff0c;从而减少实地验证软件和算法的复杂性和麻烦。 打开设备正常运转&#xff0c;当采集器通过网口将数据发送到电脑时&#xff0c…

使用Python和jieba库生成中文词云

使用Python和jieba库生成中文词云 在文本分析和数据可视化的领域中&#xff0c;词云是一种展示文本数据中关键词频率的直观方式。Python作为一种强大的编程语言&#xff0c;提供了多种库来帮助我们生成词云&#xff0c;如wordcloud和jieba。在本文中&#xff0c;我们将通过一个…

sudo: /etc/init.d/ssh: command not found

在 WSL 中尝试启动 SSH 服务时遇到 sudo: /etc/init.d/ssh: command not found 错误 安装 OpenSSH 服务器 更新软件包列表 sudo apt update安装 OpenSSH 服务器 sudo apt install openssh-server启动 SSH 服务 在 WSL 2 上,服务管理与传统 Linux 系统有所不同。你可以手动启动…

awk命令学习

awk 文本三剑客最后一个命令 grep 过滤&#xff08;查&#xff09; sed 增删改查 增和改 awk 按行取列 awk默认的分隔符 &#xff1a; 既是空格 也可以是一个TAB键 多个空格自动压缩成一个空格 awk的工作原理 &#xff1a;根据指令信息&#xff0c;逐行的读取文本内容&am…

【FPGA项目】System Generator算法板级验证-快速搭建外围测试电路

&#x1f389;欢迎来到FPGA专栏~System Generator算法板级验证-快速搭建外围测试电路 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文…

入职必备-MAC电脑适应Windows键盘修改

1.修改commend 和ctrl的位置 2.修改鼠标滚轮 mac的滚轮和windwos的滚轮方向相反 3.修改拼音和字母的切换 &#xff08;1&#xff09;删除一个系统自带的拼音输入法&#xff0c;再下载一个百度输入法 4.修改切换桌面 前:F1 后:WinD 5.修改网页刷新快捷键 前:commendr 后…

算子级血缘和血缘查询管理

数据链路 血缘关系 应用场景&#xff1a;数据资产&#xff0c;数据开发&#xff0c;数据治理&#xff0c;数据安全等等 &#xff08;绿色箭头上面是数据治理&#xff09; 场景&#xff1a; 数据链路的高效盘点与理解 数仓模型的长效优化机制 风险影响的及时全面分析 重复…

安卓app开发-基础-本地环境安装android studio且配置参数

安卓app开发-基础-本地环境安装android studio且配置参数&#xff01;今天为大家介绍一下&#xff0c;如何在自己本地电脑安装android ,studio和启动一个简单的java版本的项目。 第一步&#xff0c;去下面的地址&#xff0c;下载一个安装文件。 地址&#xff1a;AndroidDevToo…

广州高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

广州高校大学智能制造实验室数字孪生可视化系统平台建设项目验收。在广州的高校中&#xff0c;智能制造实验室一直是科研创新和技术探索的前沿阵地。随着数字化、智能化技术的迅猛发展&#xff0c;数字孪生技术逐渐成为推动制造业转型升级的重要力量。近日&#xff0c;广州某高…

分析零信任三大产品板块的发展

众所周知&#xff0c;增强型身份管理&#xff08;IAM&#xff09;、软件定义边界&#xff08;SDP&#xff09;和微隔离&#xff08;MSG&#xff09;是零信任的三大支撑技术。在中国市场&#xff0c;零信任的产品板块也按照这三大技术进行划分。2023年&#xff0c;IAM、SDP和MSG…

Makefile及gdb的使用方法介绍

makefile网址&#xff1a;跟我一起写Makefile — 跟我一起写Makefile 1.0 文档 本质 是一个工程管理文件 作用 简化编译流程 理论基础 gcc 分步编译&#xff08;4步&#xff09; 预处理->编译->汇编->链接 makefile 将.c文件生成二进制文件.o&#xff08;汇编&…

一文带你了解什么是【点击劫持】

点击劫持&#xff0c;意思就是你点击网页的时候&#xff0c;有人劫持你&#xff0c;对没错&#xff0c;劫持你的信息&#xff0c;甚至劫持你的马内&#xff0c;劫持你的理想&#xff0c;劫持你的肉体&#xff0c;劫持你的灵魂。就是这么可怕。 目录 1 如何实现假网站 1.1 if…

Spring Cloud Consul作为配置中心实践

官网地址&#xff1a;https://docs.spring.io/spring-cloud-consul/docs/current/reference/html/#spring-cloud-consul-config Consul 提供了一个键/值存储用于保存配置和其他元数据。Spring Cloud Consul Config 是 Spring Cloud Config Server和Client的一个替代方案。配置…

从零到一打造自己的大模型:模型训练

前言 最近看了很多大模型&#xff0c;也使用了很多大模型。对于大模型理论似乎很了解&#xff0c;但是好像又缺点什么&#xff0c;思来想去决定自己动手实现一个 toy 级别的模型&#xff0c;在实践中加深对大语言模型的理解。 在这个系列的文章中&#xff0c;我将通过亲手实践…

Hadoop3.3.4 + HDFS Router-Based Federation配置

一、HDFS Router-based Federation 官方文档见&#xff1a; Apache Hadoop 3.4.0 – HDFS Router-based Federationhttps://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs-rbf/HDFSRouterFederation.html 二、集群规划 本次测试采用6台虚拟机创建了2套HDF…

Linux高并发服务器开发(四)进程间通信

文章目录 1 前言2 无名管道3 有名管道4 管道读写特点5 设置管道为非阻塞6 使用有名管道实现简单版本聊天7 共享存储映射7.1 mmap 存储映射函数7.2 共享映射实现父子进程通信7.3 共享映射实现无亲缘关系进程通信7.4 匿名映射实现父子进程通信 8 信号8.1 概念和特点8.2 信号的编号…

通用后台管理系统(一)——项目介绍

目录 二、文档结构 src文件夹&#xff1a; 三、技术和插件 1、Vue router 2、element-ui框架 3、样式插件less 4、vuex状态管理 5、axios.js 6、mock.js模拟数据 7、echarts图表工具 四、项目效果展示 总结 一、项目介绍 通用后台管理是采用vue2cli开发的项目&#…