从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

    • SpringBoot教程-尚硅谷

      • SpringBoot 课程介绍
      • Spring 和 SpringBoot
        • What Spring can do
        • Spring5 重大升级
        • SpringBoot 的出现
        • SpringBoot 的时代背景
        • 如何学习 SpringBoot
        • SpringBoot 版本
        • 总结
      • HelloWorld
      • 了解自动配置原理
      • 底层注解-@Configuration 详解
      • 底层注解-@Import 导入组件
      • 底层注解-@Conditional 条件装配
      • 原生配置文件引入-@ImportResource
      • 底层注解-配置绑定 @ConfigurationProperties
      • 自动配置原理
      • 自动配置流程
      • Lombok 简化开发
      • DevTools
      • Spring-Initailizr
      • 配置文件-Yaml 用法
      • Web 开发简介
      • web 开发-静态资源规则于定制化
      • 静态资源配置原理
      • Rest 映射及源码解析
      • 请求映射原理
      • 常用参数注解使用
      • MatrixVariable:矩阵变量
      • 各种类型参数解析原理
      • Servlet-API 参数解析原理
      • Model、Map 参数解析原理
      • 自定义对象参数绑定原理
      • 自定义 Converter 原理
      • 数据响应原理
      • 内容协商原理
      • 基于请求参数的内容原理
      • 自定义 MessageConverter 原理
      • Thymeleaf 初体验
      • web 实验-后台管理系统
      • web 实验-抽取公共页面
      • web 实验-遍历数据
      • 源码分析-视图解析器与视图
      • 拦截器-登录检查与静态资源放行
      • 拦截器的执行时机和原理
      • 单文件和多文件上传的使用
      • 文件上传原理
      • 错误处理机制
      • 错误处理-底层组件源码分析
      • 异常处理流程
      • 几种异常处理原理
      • Web 原生对象注入
      • 嵌入式 Servlet 容器
      • 定制化原理
      • 数据库场景的自动配置分析和整合测试
      • 自定义方式整合 Druid
      • 通过 starter 整合 Druid
      • 整合 Mybatis
      • 使用注解整合 Mybatis
      • 整合 MybatisPlus 操作数据库
      • MybatisPlus-列表分页展示
      • 整合 Redis
      • 单元测试-Junit5
      • 单元测试-断言机制
      • 单元测试-前置条件
      • 单元测试-嵌套测试
      • 单元测试-参数化测试
      • 指标监控-基本概念
      • 指标监控-配置 EndPoint
      • 指标监控-可视化
      • 原理解析-Profile 功能
      • 配置文件深入
      • 自定义 Starter
      • SpringApplication 初始化过程
      • SpringBoot 完整启动过程
  • Java
  • SpringBoot
  • SpringBoot教程-尚硅谷
2023-08-22
目录

Spring 和 SpringBoot

# 20.Spring 和 SpringBoot

本文讲解下 Spring 和 SpringBoot 之间的区别和联系,而且我们要学好 SpringBoot,‍‍我们也应该对 Spring 的整个生态圈有所了解。 ‍

# What Spring can do

我们之前学习 Spring 的时候,或多或少知道 IoC 和 AOP 的概念,以及 SpringMVC 能快速开发一个 web 应用,这些其实就是我们所说的 Spring Framework 的基本功能。

从宏观上来说,Spring 指的是 Spring 的整个生态圈,其包含了很多的项目,每个项目都是一套解决方案(能解决特定的问题),我们可以看看 官网 (opens new window) 的图,有这么多项目:

‍

那么 Spring 能做什么呢?同理,看官网的图:

‍

  • 首先第一个是 Microservices,也就是微服务开发,‍‍我们现在开发一个系统,功能都是很多的,未来可能会成长为一个大型系统。‍‍如果我们将所有代码写在一个项目里,此时项目就会变得很庞大; 我们可以根据功能模块,将系统拆分成一个个小的应用,每个小的应用就可以称之为一个微服务。Spring 就可以快速的帮我们创建和开发一个微服务。
  • 第二个是 Reactive,响应式编程,基于我们异步非阻塞的方式,可以在应用里构建一个异步数据流,该数据流只占用少数的系统资源,但吞吐量很高。
  • 第三个是 Cloud,我们的微服务可以使用分布式的方式来部署。
  • 第四个就是最常用的 Web 开发
  • 第五个:无服务,也就是 Faas(Function as a Service),函数式服务,不用购买服务器了,只需写一个方法,就能处理 web 请求(类似一个 Controller)
  • 事件驱动
  • 批处理
  • ................ ‍ 可以说,很多解决方案我们都能在 Spring 的生态圈中找到。

但是这也有问题:项目太多了!如果我们想要使用几个 Spring 生态圈中的项目,很容易陷入到一个叫“配置地狱”的情况,例如光整合 SpringMVC 要写一大堆配置。

# Spring5 重大升级

Spring5 做出了一个重大的升级:响应式编程。下图展示了响应式编程的技术栈,与传统的 Servlet 技术栈之间的对比:

‍

因此本课程分为 2 季,第一季就是掌握右边的技术栈,第二套就是左边的技术栈

同时,Spring 是基于 Java8 的,也采用了 Java8 的一些新特性,如接口默认实现。

例如一个接口,可能有上百个方法;

而我们写一个类的时候,可能只想重写某一个方法,在 Java8 之前,其他方法我们都得实现(即使是空方法,也要实现)

Java8 之后,我们可以在接口里定义默认实现,一个类实现该接口的时候,只需重写需要的方法即可。

# SpringBoot 的出现

而 SpringBoot 能解决“配置地狱”发问题。我们可以认为 SpringBoot 是一个框架的框架,其底层是基于 Spring Framework;当我们想要使用某个 Spring 的项目(例如 SpringMVC),只需简单引入一个配置就行,我们只需关注业务逻辑,非常方便。

就好比一台电脑包含了很多的硬件:CPU,内存,显卡,硬盘等(就好比 Spring 生态圈的一个个项目)

如果我们自己组装电脑,是非常麻烦的(比如整合 SpringMVC,要写很多很多的配置)

我们需要的是一个装好的电脑(这就是 SpringBoot 的作用)

在 文档 (opens new window) 也有这样一段话:

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

大意:SpringBoot 可以很简单的创建一个独立的、生产级别的应用,开箱即用。

还介绍了 SpringBoot 的特点(特点):

  • Create stand-alone Spring applications:创建独立 Spring 应用
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files):内嵌 web 服务器。就好比买了品牌机,已经装上了操作系统了,不用再安装 Tomcat
  • Provide opinionated 'starter' dependencies to simplify your build configuration:自动 starter 依赖,简化构建配置,例如简化 SpringMVC 的配置,只需引入一个依赖就行,并且不会出现依赖之间的版本问题
  • Automatically configure Spring and 3rd party libraries whenever possible:自动配置 Spring 以及第三方功能
  • Provide production-ready features such as metrics, health checks, and externalized configuration:提供生产级别的监控、健康检查及外部化配置
  • Absolutely no code generation and no requirement for XML configuration:无代码生成、无需编写 XML ‍

# SpringBoot 的时代背景

介绍了 SpringBoot 是什么后,我们可以说下其背景,也就是微服务和分布式

# 微服务

James Lewis and Martin Fowler (opens new window) 在 2014 年就提出了微服务概念:Microservices Guide (opens new window)

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.——James Lewis and Martin Fowler (2014) (opens new window)

这是一名博主的翻译:微服务 |YYGCui' s blog (opens new window),大意如下:

  • 简单来说,微服务是一种架构风格。
  • 一个应用拆分为一组小型服务
  • 每个服务运行在自己的进程内,也就是可独立部署和升级
  • 服务之间使用轻量级 HTTP 交互
  • 服务围绕业务功能拆分
  • 可以由全自动部署机制独立部署
  • 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术 ‍

# 分布式

当我们将一个大型应用拆分成很多个小应用之后,就会涉及到分布式问题:

例如上图,每一个点就是一个小的应用,每个应用之间可能有互相调用(用一根线来连接),那么随着系统规模的增加,小应用之间的关系会变的非常非常复杂。有如下问题需要考虑:

  • 远程调用:应用之间怎么通信,HTTP 还是 TCP
  • 服务发现:比如 B 服务有 4 个,但是具体要调用哪个?如果其中一个有故障怎么办?
  • 负载均衡
  • 服务容错:例如应用之间网络异常了怎么办
  • 配置管理:比如 A 服务有 5 个,我们想要修改一个配置,不可能逐个修改
  • 服务监控:这么多小应用,怎么监控
  • 链路追踪:比如 A 服务调 B 服务,B 服务调 C 服务.....。如果链路中某个节点出现了问题,怎么排查
  • 日志管理
  • 任务调度:这么多结点,定时任务是在某一个结点上运行,还是并行运行
  • ...... ‍ 分布式的解决方案之一:SpringBoot + SpringCloud

‍

第一个是 SpringBoot,我们使用 SpringBoot 快速创建微服务项目

第二个是 SpringCloud,我们使用 SpringCloud 将微服务连接起来

第三个是 SpringCloud DataFlow,也就是应用之间的响应式数据流 ‍

# 云原生

我们最后还是将应用部署到服务器上的,此时就涉及到原生应用如何上云

上云的困难

  • 服务自愈
  • 弹性伸缩:流量高峰期,自动创建一个微服务应用。高峰期过去后,自动下线该应用
  • 服务隔离:比如一台服务器上可能部署了多个微服务应用,如果某个故障了,不影响到其他应用
  • 自动化部署
  • 灰度发布
  • 流量治理:比如性能较低的服务器只接受少量的流量
  • ......

解决方案:云原生(Cloud Native)

# 如何学习 SpringBoot

学习的时候离不开文档:

  • Spring Boot 官网 (opens new window)
  • Spring Boot 官方文档 (opens new window):各个版本的文档都有

我们不会讲解文档的所有内容,挑着讲

官网文档架构

‍

还可以下载离线文档(pdf 版本):

‍

本教程也将该文档上传至了 Gitee (opens new window) 或 GitHub (opens new window) 项目中,强烈建议下载下来,后续会经常用到。

# SpringBoot 版本

SpringBoot 是开源的,源码可以在 GitHub 上看到:spring-projects/spring-boot (opens new window)

每次版本更新的内容,也可以在 GitHub 上看到:Home · spring-projects/spring-boot Wiki (opens new window)

本次教程使用的 SpringBoot 版本和视频保持一致:2.3.4 ‍

# 总结

SpringBoot 是整合 Spring 技术栈的一站式框架

SpringBoot 是简化 Spring 技术栈的快速开发脚手架

当然,SpringBoot 也有缺点:迭代快,需要时刻关注变化;封装太深,内部原理复杂,不易精通 ‍

上次更新: 2025/5/17 12:26:09
SpringBoot 课程介绍
HelloWorld

← SpringBoot 课程介绍 HelloWorld→

最近更新
01
吐槽一下《僵尸校园》
05-15
02
2025 年 4 月记
04-30
03
山西大同 “订婚强奸案” 将会给整个社会带来的影响有多严重? - 知乎 转载
04-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式