探索SpringBoot发展历程

在这里插入图片描述

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: 循序渐进学SpringBoot
✨特色专栏: MySQL学习
🥭本文内容:探索SpringBoot发展历程
📚个人知识库 :知识库,欢迎大家访问

1.前言☕

大家好,我是Leo哥🫣🫣🫣,今天给大家带来关于精品SpringBoot专栏,暂且就给他起名为循序渐进学SpringBoot,这里我参考了我上一个专栏:循序渐进学SpringSecurity6。有需要的朋友可以抓紧学习来哈,带你从SpringSecurity从零到实战项目。好了,我们进入正题,为什么会有SpringBoot这个专栏呢,是这样的,今年Leo哥也是正在重塑知识体系,从基础到框架,而SpringBoot又是我们框架中的核心,我觉得很有必要通过以博客的形式将我的知识系列进行输出,同时也锻炼一下自己的写作能力,如果能帮到大家那就更好啦!!!本地系列教程会从SpringBoot基础讲起,会以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。本篇我们首先来介绍一下SpringBoot发展历程,好了,话不多说让我们开始吧😎😎😎。

2.SpringBoot发展史

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

自发布以来,它大大简化了基于 Spring 的应用程序的配置和部署。作为Java社区中不可或缺的关键技术,Spring Boot 的出现和发展极大地改变了 Java 企业级开发。下面将带你回顾 Spring Boot 的历史,以及它是如何发展成为如今广泛使用的框架的。

SpringBoot在Spring生态圈中的位置:

图

3.初识 Spring 框架

image-20231207211615216

在讲述 Spring Boot 的故事之前,需要简单地了解 Spring 框架,它是 Spring Boot 的前置条件。Spring 最初由 Rod Johnson 引入,并首次在2003年发布。它作为一种轻量级的反转控制(Inversion of Control, IoC)和面向切面(Aspect-Oriented Programming, AOP)的容器,打破了企业级 Java 开发复杂沉重的历史局面。

3.1 SpringFramework解决了什么问题?

Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的EnterpriseJavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。

1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑 2.可以提供众多服务,事务管理,WS等。 3.AOP的很好支持,方便面向切面编程。 4.对主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA等 5.Spring DI机制降低了业务对象替换的复杂性。 6.Spring属于低侵入,代码污染极低。 7.Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部

3.2 SpringFramework没有解决了什么问题?

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。

所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。

除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

1.jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器

2.Spring不支持分布式,这也是EJB仍然在用的原因之一

4.Spring Boot 的诞生

随着时间的发展,Spring 框架逐渐壮大,增加了众多的特性和项目,但这也带来了复杂性的增加。Spring 配置被认为过于繁琐,对于新手来说门槛较高。为了解决这个问题,Spring Boot 在2014年初首次亮相。

5.Spring Boot 目标和特点

Spring Boot 的主要目标是简化使用 Spring 框架开发新应用程序的流程。它尝试着减少配置文件的使用,并使得项目的引导、创建变得简单快速。Spring Boot 的核心特性包括:

  • 自动配置:智能地猜测开发者可能想要如何配置Spring。
  • 独立执行:支持打包成 jar 或 war 文件,且可以直接运行,无需外部依赖。
  • 内嵌服务器:默认内嵌了 Tomcat、Jetty 或 Undertow。
  • 生产就绪:提供了健康检查、度量、审计和外部化配置等生产级别的特性。

6.发展历程

  • 2014年:Spring Boot 1.0发布,并迅速在开发社区中引起了广泛的关注和讨论。
  • 2015年:Spring Boot 1.3发布,加入了许多新特性,例如开发者工具、改进了错误消息和缓存支持。
  • 2017年:Spring Boot 2.0发布,引入了大量更新,包括对 Spring Framework 5.0的支持、Kotlin的支持、响应式编程的支持等。
  • 随后几年:Spring Boot 见证了多个次要版本的发布,每个版本都在稳步提高性能、扩展特性以及提升安全性。

7.项目的影响和社区贡献

Spring Boot 的简洁和易用使它迅速成为了构建微服务应用的首选框架。它的出现,加速了微服务架构风格的普及。另外,Spring Boot 有着活跃的社区支持,众多开发者和公司对其功能进行了扩展,提供了大量的开始器(Starters)和库,用于简化特定技术栈的集成。

8.使用Springboot的8个原因

8.1 更快的开发

Spring Boot 在 Spring 生态系统上做出了很多决定和固执己见的默认设置。 这种性质有助于开发人员快速设置并投入开发。

例如,Spring MVC 可以通过大量 XML bean 定义和自定义 servlet 类实现。 但是使用 Spring Boot,它就像添加启动器依赖项一样简单。 绝对不需要代码生成 XML 配置。

8.2 一切皆有先机

Spring Boot Starters 是包含库和它们的一些自动配置的 Maven 描述符。 而且,这些启动器有助于为 Spring Boot 应用程序提供功能。 想要建立数据库连接? 有一个启动器依赖项。 想与消息队列通话或发送电子邮件? Spring Boot 涵盖了这一切。

对于几乎所有的 Spring 模块,都有一个启动器依赖项可以为您配置所有内容。 甚至一些第三方库也通过他们的启动模块提供对 Spring 的支持。 如果没有这些启动器,您作为开发人员将不得不维护依赖项和 XML 配置。 这是您应该使用 Spring Boot 的另一个原因。

8.3 嵌入式服务器

Spring Boot 为嵌入式 Tomcat、Jetty 和 Undertow 服务器提供开箱即用的支持。 这样,开发人员就不必担心在传统应用服务器中部署 Web 应用程序。 通过适当的启动器依赖项,您甚至可以将一种服务器技术与其他服务器技术交换。 所以你实际上最终得到了一个可以像任何 JAR 一样运行的 JAR 文件。 在启动时,JAR 包含足够的库和配置以作为应用程序服务器启动并侦听请求。

如果您对嵌入式服务器不感兴趣,您可以随时将 Spring Boot 应用程序从 JAR 转换为 WAR,并将它们部署到传统服务器。

8.4 IDE 对 Spring Boot 的支持

所有主要的 IDE 都提供对 Spring Boot 代码帮助的支持。 例如,IntelliJ IDEA Ultimate 为 Spring Boot 项目提供了出色的代码完成和导航功能。除此之外,VSCode 和 Eclipse 也对其提供了丰富的功能支持。

8.5 生产环境常用功能

Spring Boot 提供了生产就绪的特性,例如监控、指标和开箱即用的注销。 有了这些特性,开发人员可以避免额外的配置。 例如,健康执行器端点等功能使应用程序状态监控成为可能。 例如,

您可以让像 Prometheus 这样的工具收集应用程序指标

在您的 Kubernetes 或 Openshift 环境中使用就绪性和活跃度健康端点。

只需添加其他属性或通过 /actuator/logging 端点即可更改日志记录级别。

此外,开发人员可以使用自己的自定义健康端点配置这些执行器端点。

8.6 开箱即用的 JUnit 支持

默认情况下,所有 Spring Boot 项目都带有 JUnit 5。 此外,Spring Boot 提供了@SpringBootTest 注解来在我们需要时初始化测试上下文。 所以开发人员只需要编写测试用例。 他们不必再担心测试用例的复杂 spring 上下文。

例如,下面自动生成的测试将检查上下文是否正确加载。

@SpringBootTest
class SpringBootDerbyDatabaseApplicationTests {@测试void contextLoads() {}}

8.7 Spring Profiles

Spring Profiles 是 spring Boot 的一个强大特性,有助于隔离应用程序中的不同组件。 使用配置文件,您可以在特定环境中启用或禁用组件。 当您必须根据特定条件使用不同的组件时,这可能会派上用场。

@Profile(value = {"prod","uat"})
class RabbitMQConfig {// 听众}

在上面的代码中,上下文将限制兔子侦听器仅在具有 prod 或 uat 作为活动配置文件的环境中运行。

8.8 多种打包和部署选项

该框架提供了多种方式来打包您的应用程序。 正如我们之前所说,应用程序可以是 JAR 或 WAR 文件。 通过一些额外的配置和参数,您还可以创建开箱即用的高性能 docker 镜像。

启动和停止 Spring Boot 应用程序非常简单。 此外,您可以通过几个额外的步骤将这些 JAR 文件部署为 linux 服务。 JAR 文件称为 FAT jar,它们包含与应用程序相关的所有依赖项。 这使得部署过程不那么复杂。 实际上,这些构建可以在任何装有 Java 8 或更高版本的机器上运行。

9.参考文献

文章参考以下文献,如果侵权请联系Leo哥邮箱:m2942894660@163.com,立删。

  • https://spring.io/
  • https://github.com/h2pl/JavaTutorial/blob/master/docs/Spring%E5%85%A8%E5%AE%B6%E6%A1%B6/SpringBoot/SpringBoot%E7%9A%84%E5%89%8D%E4%B8%96%E4%BB%8A%E7%94%9F.md

10.文末推荐🍭

如果你刚学完SSM框架,如果你想学系统的学习SpringBoot,如果你想使用SpringBoot去集成各种其他组件,那么我这份循序渐进学SpringBoot一定是首选,带你从零到深入学习SpringBoot。抓紧订阅起来吧。用知识点+案例+项目解读的学习模式由浅入深对Spring Boot框架进行学习&使用。

公众号封面

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

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

相关文章

年薪50w的测试开发是如何编写测试方案!看过来!!!

1. 测试方案内容 测试目标 测试对象测试完成时间 测试范围 测试目标 新增功能回归模块优先级 测试顺序测试深浅 测试策略 测试方法:黑盒、白盒、灰盒测试阶段:单元、集成、系统、验收测试类型: 功能性性能和稳定性安全自动化... 测试工…

您知道计算机是怎么分类的嘛

地表最强计算机 第 61 版全球最强大的超级计算机已经发布。名为 Top500,顾名思义,该列表列出了全球 500 台最强大的超级计算机。榜单显示,美国的AMD、英特尔和IBM处理器是超级计算系统的首选。在 TOP10 中,有四个系统使用 AMD 处理…

C++ day49 买卖股票的最佳时机

题目1:121 买卖股票的最佳时机 题目链接:买卖股票的最佳时机 对题目的理解 prices[i]表示一支股票在第i天的价格,只能在某一天买入这支股票,并在之后的某一天卖出该股票,从而获得最大利润,返回该最大值&…

IPTABLES(一)

文章目录 1. iptables基本介绍1.1 什么是防火墙1.2 防火墙种类1.3 iptables介绍1.4 包过滤防火墙1.5 包过滤防火墙如何实现 2. iptables链的概念2.1 什么是链2.2 iptables有哪些链 3. iptables表的概念3.1 什么是表3.2 表的功能3.3 表与链的关系 4. iptables规则管理4.1 什么是…

【华为数据之道学习笔记】3-4主数据治理

主数据是参与业务事件的主体或资源,是具有高业务价值的、跨流程和跨系统重复使用的数据。主数据与基础数据有一定的相似性,都是在业务事件发生之前预先定义;但又与基础数据不同,主数据的取值不受限于预先定义的数据范围&#xff0…

MySql概述及其性能说明

MySQL是一种开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,现属于Oracle公司。MySQL是最流行的开源数据库之一,被广泛地应用于Web开发中。MySQL提供了一个高度稳定可靠的数据存储解决方案,同时也可以很容易地跨平台运行。My…

2023年广东工业大学腾讯杯新生程序设计竞赛

E.不知道叫什么名字 题意:找一段连续的区间,使得区间和为0且区间长度最大,输出区间长度。 思路:考虑前缀和,然后使用map去记录每个前缀和第一次出现的位置,然后对数组进行扫描即可。原理:若 s …

Linux篇之在Centos环境下搭建Nvidia显卡驱动

一、前提条件 1、首先确认内核版本和发行版本,再确认显卡型号 uname -a // Linux localhost.localdomain 4.18.0-408.el8.x86_64 #1 SMP Mon Jul 18 17:42:52 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux1.2 cat /etc/redhat-release // CentOS Stream release 81.3…

【S2ST】Direct Speech-to-Speech Translation With Discrete Units

【S2ST】Direct Speech-to-Speech Translation With Discrete Units AbstractIntroductionRelated workModelSpeech-to-unit translation (S2UT) modelMultitask learningUnit-based vocoder ExperimentsDataSystem setupBaselineASRMTTTSS2TTransformer Translatotron Evaluat…

Python Jinja2 库的无限可能性

更多资料获取 📚 个人网站:ipengtao.com Jinja2,作为Python中最流行的模板引擎之一,为开发者提供了强大的工具,用于在Web应用和其他项目中生成动态内容。本文将深入研究 Jinja2 库的各个方面,提供更丰富的…

数据科学:Matplotlib、Seaborn笔记

数据科学:Numpy、Pandas 数据科学:Matplotlib、Seaborn笔记 数据科学:Numpy、Pandas、Matplotlib、Seaborn、Scipy、Scikit-Learn 三、Matplotlib1.Matplotlib subplots函数2.tight_layout()函数3.Matplotlib grid()设置网格格式4.fill_bet…

<蓝桥杯软件赛>零基础备赛20周--第9周--前缀和与差分

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周(读者可以按…

从零开始的c语言日记day41——自定义类型结构体

一、结构体的声明 1.1结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 Tag结构体标签 Member-list成员列表-里面可以有很多成员 Variable-list变量列表 结构体类型的定义方式 S1,s2是struct stu类型的…

黑苹果之显卡篇

一、什么是显卡 显卡GPU(Video card、Display card、Graphics card、Video adapter)是个人计算机基础的组成部分之一,将计算机系统需要的显示信息进行转换驱动显示器,并向显示器提供逐行或隔行扫描信号,控制显示器的正…

python数据分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 pandas统计分析基础实训 实训1 读取并查看某地区房屋销售数据的基本信息1. 训练要点2. 需求说明3.实现思路及步骤 实训2 提取房屋售出时间信息并描述房屋价格信息1. 训练要点…

数据结构 图的广度优先搜索和深度优先搜索

一、广度优先搜索 广度优先搜索等价于树的层次遍历,将起点的每一层进行遍历 当这一层结点全部被遍历完时,再遍历下一层次,从图中可以根据距离遍历起点的长度进行层次选择 例: 以a结点作为开始结点 a的下一层次有b c e三个结点 所以…

Spark Structured Streaming使用教程

文章目录 1、输入数据源2、输出模式3、sink输出结果4、时间窗口4.1、时间窗口4.2、时间水印(Watermarking) 5、使用例子 Structured Streaming是一个基于Spark SQL引擎的可扩展和容错流处理引擎,Spark SQL引擎将负责增量和连续地运行它&#…

Spring Security 自定义异常失效?从源码分析到解决方案

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

使用阿里巴巴同步工具DataX实现Mysql与ElasticSearch(ES)数据同步

一、Linux环境要求 二、准备工作 2.1 Linux安装jdk 2.2 linux安装python 2.3 下载DataX: 三、DataX压缩包导入,解压缩 四、编写同步Job 五、执行Job 六、定时更新 6.1 创建定时任务 6.2 提交定时任务 6.3 查看定时任务 七、增量更新思路 一、Linux环境要…

微信小程序js数组对象根据某个字段排序

一、排序栗子 注: 属性字段需要进行转换,如String类型或者Number类型 //升序排序 首元素(element1)在前 降序则(element1)元素在后 data data.sort((element1, element2) >element1.属性 - element2.属性 ); 二、代码 Page({/*** 页面的初始数据*/data: {user:…