探索SpringBoot发展历程

2023-12-14 15:32:02

在这里插入图片描述

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

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框架进行学习&使用。

公众号封面

文章来源:https://blog.csdn.net/qq_58608526/article/details/134865549
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。