当前位置: 首页 > news >正文

SpringBoot基础(一):快速入门

SpringBoot基础系列文章

SpringBoot基础(一):快速入门


目录

  • 一、SpringBoot简介
  • 二、快速入门
  • 三、SpringBoot核心组件
    • 1、parent
      • 1.1、spring-boot-starter-parent
      • 1.2、spring-boot-dependencies
    • 2、starter
      • 2.1、spring-boot-starter-web
      • 2.2、spring-boot-starter
      • 2.3、parent和starter的区别
    • 3、启动类
    • 4、内嵌Tomcat运行原理

一、SpringBoot简介

  • SpringBoot可以简单快速地创建一个独立的、生产级别的Spring应用(说明:SpringBoot底层是Spring)
  • 大多数SpringBoot应用只需要编写少量配置即可快速整合Spring平台以及第三方技术

SpringBoot特性

  • 快速创建独立Spring应用
    • 以前的SSM框架,需要导包、写配置、启动运行
  • 直接嵌入Tomcat、Jetty or Undertow,不再需要部署war包
  • 提供可选的场景启动器(starter),简化应用整合
    • 为每一种场景准备一个依赖,如:spring-boot-starter-web、mybatis-plus-boot-starter
    • 以前需要导包,控制版本
  • 按需自动配置Spring以及第三方库
    • 约定大于配置:每个场景都有很多基本的默认配置

总结:简化整合、配置、开发、部署

二、快速入门

pom.xml

  • 所有springboot项目pom文件都必须继承spring-boot-starter-parent
  • web场景启动器spring-boot-starter-web包含了web开发的所有依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 所有springboot项目都必须继承自 spring-boot-starter-parent --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.11</version><relativePath/></parent><artifactId>springboot</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- web开发的场景启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><!-- SpringBoot应用打包插件mvn clean package把项目打成可执行的jar包java -jar demo.jar启动项目--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

核心启动类

// 这是一个SpringBoot应用
@SpringBootApplication 
public class SpringBootMainApplication {public static void main(String[] args) {SpringApplication.run(SpringBootMainApplication.class,args);}
}

Controller测试类

@RestController
public class HelloController {@GetMapping("/hello")public String hello(){return "Hello,Spring Boot !";}
}

访问路径:http://localhost:8080/hello

在这里插入图片描述

三、SpringBoot核心组件

1、parent

  之前传统框架对依赖版本的选择具有固定的搭配格式,并且这些依赖版本的选择还不能乱搭配。于是SpringBoot将所有的技术版本的常见使用方案(parent版本)都整理出来,以后开发者直接使用它提供的方案(parent版本)即可,就不用担心冲突问题了。

1.1、spring-boot-starter-parent

parent版本即为SpringBoot项目pom文件的父工程坐标

  • parent有很多版本,每个parent版本包含了几百种技术的版本号
  • parent只负责进行版本管理不会导入坐标
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.11</version>
</parent>

spring-boot-starter-parent坐标内容

  • 核心内容spring-boot-dependencies依赖管理,下面讲
  • 设置默认的java编译版本以及编码方式
  • 管理打包插件的版本,这也是SpringBoot的pom文件中打包插件不用写版本号的原因

在这里插入图片描述

1.2、spring-boot-dependencies

  • 这里将常用的框架之间适配的版本号已配置好
  • 只管理依赖版本,而不导入依赖
  • <dependencyManagement>依赖管理标签内,则表示只是引入申明,只有在子pom中使用<dependencies>(不用写版本号)依赖才会导入

在这里插入图片描述

  • 如果想导入依赖则需要在SpringBoot的pom文件中配置,如导入activemq
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-amqp</artifactId>
</dependency>
  • 如果想要修改版本号,可以在SpringBoot的pom文件中配置
<properties><activemq.version>5.7.0</activemq.version>
</properties># 或者直接修改版本,maven就近原则<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-amqp</artifactId><version>5.7.0</version>
</dependency>

2、starter

  • starter定义了使用某种技术时对于依赖的固定搭配格式,可以帮助开发者减少依赖配置
    • 官方提供的场景:命名为:spring-boot-starter-*
    • 第三方提供场景:命名为:*-spring-boot-starter

2.1、spring-boot-starter-web

  • 项目中的pom.xml没有写SpringMVC的坐标,而只添加spring-boot-starter-web的依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • spring-boot-starter-web中定义了若干个具体依赖的坐标

在这里插入图片描述

  • 简单看下spring-boot-starter-jsonspring-boot-starter-tomcat的内容

在这里插入图片描述

2.2、spring-boot-starter

  • 这里会导入spring的依赖

在这里插入图片描述

  • 核心依赖spring-boot-autoconfigurejar
  • 这些类会通过条件组件给spring容器导入bean对象(如:导入redis依赖,就会导入StringRedisTemplate对象,服务中我们就可以直接注入使用了)
  • 具体内容后面源码章节详解

在这里插入图片描述

2.3、parent和starter的区别

  • parent是定义了几百种依赖版本号
    • 以前写依赖需要自己手工控制版本,现在由SpringBoot统一管理,这样就不存在版本冲突了
    • 用来减少依赖冲突的
  • starter是一个坐标中定了若干个坐标
    • 以前写多个的,现在写一个
    • 用来减少依赖配置的书写量

3、启动类

  • Spring程序运行的基础是需要创建自己的Spring容器对象(IoC容器)
  • 将所有的对象交给Spring的容器管理,也就是一个一个的Bean
  • 当前这个类运行后就会产生一个Spring容器对象,通过容器对象可以直接操作Bean
  • 默认扫描包为启动类所在包及其子包
@SpringBootApplication
public class SpringBootMainApplication {public static void main(String[] args) {//获取ioc容器ConfigurableApplicationContext context = SpringApplication.run(SpringBootMainApplication.class, args);//获取组件User user = context.getBean(User.class);System.out.println(user);}
}

4、内嵌Tomcat运行原理

  • 从上面说到的内嵌tomcat的spring-boot-starter-tomcat说起
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.7.11</version><scope>compile</scope>
</dependency>
  • 这里导入了很多tomcat相关依赖

在这里插入图片描述

  从上面说到的spring-boot-autoconfigurejar包里的配置类,找到ServletWebServerFactoryAutoConfigurationServletWeb服务器工厂自动配置

  Tomcat类来自于tomcat-embed-core-9.0.74.jar,由于导入这个jar,才能创建Tomcat容器工厂类,后续才能创建Tomcat容器并启动。

在这里插入图片描述

  • 这里简单截图说下tomcat启动流程

创建Tomcat

在这里插入图片描述

启动Tomcat

在这里插入图片描述

挂起Tomcat,这也就是启动类main函数不会执行结束的原因

在这里插入图片描述

  • 这里只是简单介绍下,后续关于tomcat的源码章节详解

相关文章:

SpringBoot基础(一):快速入门

SpringBoot基础系列文章 SpringBoot基础(一)&#xff1a;快速入门 目录 一、SpringBoot简介二、快速入门三、SpringBoot核心组件1、parent1.1、spring-boot-starter-parent1.2、spring-boot-dependencies 2、starter2.1、spring-boot-starter-web2.2、spring-boot-starter2.3、…...

使用Weka进行数据挖掘与机器学习

在当前大数据时代&#xff0c;数据挖掘与机器学习已经成为了不可或缺的技术。而Weka是一个非常流行的机器学习软件&#xff0c;它提供了一整套的机器学习算法和数据处理工具。Weka不仅支持命令行操作和GUI&#xff0c;还提供了Java API&#xff0c;非常适合Java开发者进行数据挖…...

定时器知识点

#视频教程&#xff1a; 11.TIM定时中断 CSDN教程 知识点&#xff1a; 1.时钟源选择图 ![[Pasted Image 20240802103525_114.png]] 基本定时器 2个功能 &#xff1a;只能定时中断和主模式触发DAC的功能 知识点 1.时基单元&#xff1a;预分配器&#xff08;PSC&#xff09;、…...

桌面日历还能这样玩?这个日历太酷了吧!秒变桌面记事本!

大家应该有经常看日历的习惯&#xff0c;每个人都有不同的日历需求。特别是一些节假日&#xff0c;重要节日时候&#xff0c;大家看日历的频次就比较高了&#xff0c;如何选一款好用的日历&#xff1f;我们给大家展示一款非常不错的桌面日历&#xff0c;看下你喜不喜欢&#xf…...

基于深度学习的太阳暗条检测(2020年以来)

A universal method for solar filament detection from Hα observations using semi-supervised deep learning A&A, 686, A213 (2024) A universal method for solar filament detection from Hα observations using semi-supervised deep learning (aanda.org) ABS…...

【吊打面试官系列-Elasticsearch面试题】Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?

大家好&#xff0c;我是锋哥。今天分享关于 【Elasticsearch 在部署时&#xff0c;对 Linux 的设置有哪些优化方法?】面试题&#xff0c;希望对大家有帮助&#xff1b; Elasticsearch 在部署时&#xff0c;对 Linux 的设置有哪些优化方法? 面试官 &#xff1a;想了解对 ES 集…...

MySQL·C/C++访问数据库

目录 准备工作 测试是否安装成功 C/C语言访问 官方文档 接口介绍使用 mysql_init() mysql_close() 补充1&#xff1a;makefile编写 mysql_real_connect() 测试1&#xff1a;编译链接 mysql_query() 测试2&#xff1a;SQL语句测试 改 增 删 查 错误1&#x…...

python.tkinter设计标记语言(渲染2-渲染器)

TOC 前言 本文仅作为笔记记录。 在前文中&#xff0c;我们通过标记意义解释生成了带有明确渲染要求的参数组&#xff0c;以<title>为例&#xff0c;我们获取了title, level两个明确的渲染标记&#xff0c;这一部分由Tin标记解释器完成&#xff0c;不需要编写者花费过多…...

Cadence学习笔记 Day0 Cadence17.4环境安装

当然是选择“吴法安装” 直接跟着吴川斌博客的方法来就可以了&#xff0c;这里大致记录一下我的安装步骤&#xff1a; 安装许可证管理器破解许可证管理器安装软件以及补丁破解软件 获取 直接放出链接&#xff1a;吴川斌的博客 下载得到&#xff1a; 一、安装许可证管理器&am…...

k8s创建secret并在container中获取secret

k8s创建secret并在container中获取secret 本文使用的deployment和service与我的上一篇文章一样。link也放在下面了&#xff0c;如果不懂什么事deployment和service&#xff0c;可以先看我的上一篇文章。 k8s使用kustomize来部署应用 下面我们将通过创建secret开始。secret是我…...

Leetcode每日一题之仅仅反转字母(C++)

在学习之余对于知识的巩固也尤为重要&#xff0c;不论难度高低&#xff0c;都会对代码的理解有所加深&#xff0c;下面我们开始练习 思路解析 关于本题的核心思路就是如何判断字符串中元素是否为字母以及如何遍历字符串以达到仅反转的目的&#xff0c;这里用到的知识就是关于 s…...

PDF预览:利用vue3-pdf-app实现前端PDF在线展示

目录 PDF预览&#xff1a;利用vue3-pdf-app实现前端PDF在线展示 一、vue3-pdf-app组件介绍及其优点 1、vue3-pdf-app是什么 2、作用与场景 3、类似的插件 二、项目初始化与依赖安装 1、初始化Vue3项目 2、安装依赖 三、集成vue3-pdf-app插件 1、引入插件 2、配置组件…...

【OpenCV C++20 学习笔记】拉普拉斯(Laplace)二阶求导-边缘检测

拉普拉斯二阶求导 原理拉普拉斯算子(Laplacian Operator) API实例 原理 在OpenCV中&#xff0c;Sobel算法可以对图片中的值求一阶导数&#xff0c;从而计算出图片中的边缘线。其原理如下面的示意图&#xff1a; 那么&#xff0c;如果再求一次导数的&#xff0c;即求二阶导数&…...

MySQL的下载和安装步骤

一、数据库概述 我们先来了解三个概念&#xff1a;数据库、数据库管理系统、SQL。 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase&#xff08;DB&#xff09;数据库管理系统操纵和管理数据库的大型软件DataBase Management System (DBMS)SQL操…...

Java国际版同城服务美容美发到店服务上门服务系统

&#x1f30d;全球美妆新风尚&#xff01;国际版同城服务&#xff0c;美容美发一键享 &#x1f3d9;️【国际视野&#xff0c;同城便捷】&#x1f3d9;️ 在这个全球化的时代&#xff0c;美丽不再受地域限制&#xff01;国际版同城服务系统&#xff0c;将全球顶尖的美容美发资…...

硬件模拟的基本原理

具体来说&#xff0c;这种设计方法减少了集成电路 (IC) 设计和开发的设计迭代次数&#xff0c;并且广泛适用于所有电力电子设计。我详细介绍了我在快速上市 IC 开发方面的经验&#xff0c;并将该方法与其他旨在缩短产品开发时间的技术进行了对比。 产品开发流程 图 1&#xff…...

WPF学习(8)- Button按钮

1. 用法解析 Button因为继承了ButtonBase&#xff0c;而ButtonBase又继承了ContentControl&#xff0c;所以&#xff0c;Button可以通过设置Content属性来设置要显示的内容。例如 <Button Content"确定"/>我们使用Button的时机&#xff0c;通常是鼠标点击事件…...

Flutter GPU 是什么?为什么它对 Flutter 有跨时代的意义?

Flutter 3.24 版本引入了 Flutter GPU 概念的新底层图形 API flutter_gpu &#xff0c;还有 flutter_scene 的 3D 渲染支持库&#xff0c;它们目前都是预览阶段&#xff0c;只能在 main channel 上体验&#xff0c;并且依赖 Impeller 的实现。 Flutter GPU 是 Flutter 内置的底…...

第6章>>实验7:PS(ARM)端Linux RT与PL端FPGA之间(通过Memory存储器进行通信和交互)《LabVIEW ZYNQ FPGA宝典》

1、实验内容 上一节实验里面介绍的Reg寄存器通道比较适合在PS端和PL端之间传递标量数据&#xff0c;也就是单个元素&#xff0c;如果要传递多个元素的数组或者连续数据流的话&#xff0c;Reg寄存器通道就不是很合适了。 本节实验我们向大家讲解如何借助Memory存储器通道在PS&am…...

通用前端的学习

通用前端的概念 通用前端的概念是我自创的&#xff0c;也是我多年开发全栈时的个人理解&#xff0c;结合自己对各种语言的比较&#xff0c;发现前端都具有几个特征&#xff0c;而这几个特征&#xff0c;很多人只能用具体的表象来描述&#xff0c;比如用安卓方式来说明&#xf…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...