【SpringBoot】简介及传统的 Spring 框架:对比和分析

2023-11-16

 哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ  


今天给大家带来的是 SpringBoot 的简介,SpringBoot 项目的创建,相较于 Spring 框架的优点: 1. 快速的集成框架  2.内置运行容器, 快速的部署项目 3. 摒弃繁琐的 xml,使用注解和配置的方式进行开发。4. 支持更多的监控的指标,本文将为大家讲解,一起来看看叭~


本期收录于博主的专栏JavaEE_保护小周ღ的博客-CSDN博客

适用于编程初学者,感兴趣的朋友们可以订阅,查看其它 “JavaEE基础知识”。

更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘

一、SpringBoot 简介

SpringBoot 的由来可以追溯到 Spring 框架。Spring 是一个非常流行的开源 Java 框架,用于构建企业级应用程序。然而,使用 Spring 框架开发传统的 Java 应用程序需要进行繁琐的配置,并且部署也需要额外的手动操作。

为了简化 Spring 应用程序的开发和部署过程,SpringBoot 在2013年由 Pivotal 团队推出(与Spring 并不是同一团队)。它的目标是通过提供一系列的自动配置、快速启动、内嵌服务器和起步依赖项等功能,使得开发者可以更轻松地创建和部署 Spring 应用程序。

SpringBoot 的设计理念是 “约定大于配置” 的方式来提高开发效率。它采用了一套预定义的规则和约定,根据项目的依赖和类路径进行自动配置,大部分情况下无需手动配置。开发者只需要关注业务逻辑的实现而不必浪费时间在繁琐的配置上。

Spring 的诞生是为了简化 Java 应用程序的开发,而 SpringBoot 的诞生是为了简化 Spring 程序的开发,SpringBoot 是为了快速的开发 Spring 框架而诞生的。

例如:Spring 割稻谷

SpringBoot 割稻谷

也是很鲜明的对比,技术的更新迭代嘛,新的技术相较于之前的技术在效率方面肯定有一些提升。


二、SpringBoot 的优点

优点建立在Spring 框架的基础之上~

2.1 快速的集成框架:

我们想要创建 Spring 项目,最常用的一个做法是先创建一个Maven 项目,然后从 Maven 中央仓库中获取 Spring 的依赖(Spring 属于第三方开源框架),注入到 pom.xml 配置文件中。

将一些都做好了之后,我们可能还需添加一些其他第三方依赖,例如:JDBC (数据库),一些工具依赖 lombok 等等,不知道细心的朋友发现了没,我们添加的各种依赖都有一个版本号,如果这些第三方依赖彼此之间版本不兼容,如果我们使用了这些依赖,可能会导致程序无法启动,或者是一些功能的瘫痪。

所以创建Spring 项目,我们需要添加相关依赖,需要注意依赖的版本之间是否兼容!!!


 2.1.1 SpringBoot 的创建

如果我们使用的 IDEA 的社区版,要先安装Spring Boot Helper 插件(这个插件在社区版 2022 之前才免费,之后的版本需要收费的)才能创建  SpringBoot 项目。

 安装好之后,它的名字就变成了 Spring Initializr and Assistant:

 

 然后我们使用 IDEA 创建项目的时候就可以使用该插件创建~

注意选择你本机上安装的 JDK 的版本

点击next 后:

 点击 Finish 就完成 Spring Boot 的项目创建了.


我们也可以不使用 IDEA 创建SpringBoot 项目,使用 Spring官网提供的网页版本来创建 SpringBoot项目,或者 阿里提供的网页版创建项目

网页版创建路径:https://start.spring.io
网页版创建好项目后,会得到一个 SpringBoot 的zip 压缩包,解压后使用 Idea 打开后也可以直接使用项目,注意网页创建项目的时候需要选择的JDK适配 与本机的JDK 版本适配。


我们使用 IDEA 创建一个 SpringBoot 项目感觉过程非常的繁琐,但这些流程全部都是必要的,没有一丝的拖泥带水,最最最关键的是SpringBoot 可以帮我们根据 SpringBoot 的版本去适配其他的第三方框架(依赖)的版本这是他的优点,可以快速的集成框架。


2.2 内置运行容器, 快速的部署项目

SpringBoot内置了多种容器,可以根据需要选择合适的容器。以下是Spring Boot内置的容器:

  1. Tomcat(默认):Spring Boot默认使用的容器是Apache Tomcat。Tomcat是一个轻量级的Java Web(HTTP)服务器,以及一个Servlet容器。Spring Boot会自动配置Tomcat作为默认的内置容器。

  2. Jetty:Spring Boot也支持使用Jetty作为内置容器。Jetty是另一个流行的Java Web服务器和Servlet容器。可以通过在pom.xml文件中添加jetty依赖来切换至Jetty容器。

  3. Undertow:另一个可选的内置容器是Undertow。Undertow是一个轻量级的高性能Web服务器,由JBoss开发。可以通过在pom.xml文件中添加undertow依赖来切换至Undertow容器。

可以通过在Spring Boot的配置文件(application.properties或application.yml)中设置相关属性来配置使用的内置容器。例如,可以设置server.port属性来指定监听的端口号。

需要注意的是,SpringBoot也支持通过外部容器部署应用程序,例如使用独立的Tomcat或Jetty服务器来承载应用程序。这样做可以提供更灵活的部署和扩展选项。

Java在运行部署这一块Tomcat 使用的是最多的,他是用Java代码写的 HTTP 协议的服务器,JavaWeb 这一块是靠这些内置容器提供 API 对HTTP 协议数据报进行处理。

像Servlet 项目就需要我们手动去配置一个外置的 Tomcat 然后将项目打包部署到容器中。在项目部署的时候我们同样也需要安装一个 Tomcat 到服务器上,而 SpringBoot 项目内部集成了 Tomcat ,所以我们就可以做到快速的部署项目,无需外部容器即可启动。


2.3 摒弃繁琐的 xml,使用注解和配置的方式进行开发。

Spring 在启动时需要根据 Spring配置文件(.xml)中配置的包路径扫描包中的那些类被注解注释了,然后将这些被注释的类实例(Bean对象)到 Spring 容器中。

而SpringBoot 项目,当我们把要注⼊到容器类和启动类放到同级目录下时:

这个时候当项目启动时才能扫描注解修饰的类,将Bean 对象注入到容器中。

对比 Spring 项目我们就可以直观的看到区别,Spring 中需要配置 Bean 对象的包扫描路径,而SpringBoot 不用(约定大于配置)。我们在做大项目的时候,目录是有很多的,如果都是用 xml 文件配置路径,是非常繁琐的操作。

SpringBoot 还有一个优点就是有配置文件,自动装配,这个跟Spring 自动装配不是一个概念,Boot 项目启动时,可以从配置文件中读取类实例所需的第三方数据!!

举个例子,创建Mysql 数据库对象—— datasource

常规的做法是我们手动配置数据源:

这意味着写死了,因为我们将项目打包部署,生成的是字节码文件(.class 二进制),如果我们实际的运行环境跟我们项目中的数据不适配,本地调试的数据库跟服务器上的数据库那是两个不同的用户名,密码,不一定一样(本地能跑,服务器上跑不了,需要调试,或者因为服务器上的某些数据要被修改(账户,密码),但是对于我们的字节码文件来说,修改不了,程序自然就无法运行,还得返工,让开发人员重新调整然后打包部署,这个操作就非常的麻烦。

而SpringBoot 项目创建一个Mysql数据源就先从配置文件中读取相关信息,然后帮我们生成一个 Mysql 的数据源,这意味着,文件是可以随时修改得,类在实例时,所依赖的关键数据可以变化的。

包括端口号,本地默认是 8080,成产环境的服务器 8080 端口可能被占用了,这种情况下我们也可在配置文件中修改应用程序的端口号,这些都是 SpringBoot 项目的优点。

当然普通的项目中,我们也可以创建一个配置文件,利用 IO 流来读取相关信息,说白了,增加了类的复杂度,程序猿的代码需要框框写,奈何 SpringBoot 是自带的呢,而且配合注解使用就可以读取啦。SpringBoot 配置文件是非常强大的嘞,详细内容请听下回揭晓~


2.4  支持更多的监控的指标

SpringBoot提供了一些内置的监控指标,可以通过集成的监控工具或者自定义指标来获取更多信息。下面是一些SpringBoot支持的监控指标的示例:

  1. 健康指标(Health Indicators):用于检查应用程序的健康状况,包括内存使用、数据库连接状态等。

  2. 内存指标(Memory Metrics):跟踪应用程序的内存使用情况,包括堆内存使用量、非堆内存使用量等。

  3. CPU指标(CPU Metrics):监控应用程序在处理请求时的处理器使用率。

  4. 线程指标(Thread Metrics):跟踪应用程序的线程池使用情况,以及活动线程的数量等。

  5. 请求统计指标(Request Metrics):监控应用程序的请求处理情况,如请求的数量、平均响应时间等。

  6. 数据库指标(Database Metrics):用于跟踪应用程序与数据库之间的交互情况,如查询执行时间、连接池使用情况等。

  7. 日志指标(Log Metrics):跟踪应用程序的日志输出情况,如日志级别、日志条目数量等。

  8. 缓存指标(Cache Metrics):监控应用程序的缓存使用情况,如缓存命中率、缓存清除次数等。

这些指标可以方便地通过Spring Actuator模块来进行监控和暴露,也可以选择使用自带的监控工具或者结合第三方监控工具进行监控和分析。

以上我们最常用的是日志,项目在运行的过程中遇到的那些问题,通常在日志中就可以体现出来,日志的内容和级别是撒时候记录可以由程序员自己决定。

 关于日志的相关操作我也会在后期的文章当中给大家讲述……


好了,到这里,【SpringBoot】简介及传统的 Spring 框架:对比和分析 博主已经分享完了,希望对大家有所帮助,如有不妥之处欢迎批评指正。 

下期预告:【SpringBoot】日志、【SpringBoot】配置文件

感谢每一位观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* 

遇见你,所有的星星都落在我的头上……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【SpringBoot】简介及传统的 Spring 框架:对比和分析 的相关文章

  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • react多重判断条件渲染相应组件

    需求来了 多种判断条件下 判断后渲染对应的组件 如果说if else堆叠 那代码会又乱又没有可读性 并且还要渲染对应的组件 最好的思路就是用switch case语句 但是又不想在render里写 那就要借助react的state 是的 r
  • JS深拷贝实现的三种方法

    对象的深拷贝 会另外创建一个一模一样的对象 新对象和原对象不共享内存 修改新对象不会影响原对象 1 递归 function deepClone obj 定义一个变量 并判断是数组还是对象 var objClone Array isArray
  • 260道2023最新网络安全工程师面试题(附答案)

    2023年过去了一大半 先来灵魂三连问 年初定的目标完成多少了 薪资涨了吗 女朋友找到了吗 好了 不扎大家的心了 接下来进入正文 由于我之前写了不少网络安全技术相关的文章和回答 不少读者朋友知道我是从事网络安全相关的工作 于是经常有人私信问
  • jeesite上传返回路径

    lt form fileupload id upload3 returnPath true filePathInputId author fileNameInputId upload3Name uploadType image readon
  • nar神经网络_基于神经网络的预测模型

    基本思想 根据前几次的数据模拟下一次的数据 需要数据具有 周期性 且周期可知 matlab代码 x 54167 55196 56300 57482 58796 60266 61465 62828 64653 65994 67207 6620
  • mllib 协同过滤_使用spark mllib协同过滤进行图书推荐(Java版)

    0 协同过滤算法简介 协同过滤 Collaborative Filtering 简单来说是利用某兴趣相投 拥有共同经验之群体的喜好来推荐用户感兴趣的信息 根据关注内容的不同 协同过滤算法分为三类 以用户为基础 User based 的协同过
  • 7.3 行高:line-height属性[3]

    7 3 4 浏览器的差别与错误 浏览器在显示的时候往往会有自己的表现形式 例如在Opera内 行高将按照CSS定义的将行距除以2增加到内容区域的上下两边 而IE和Firefox则不是完全平分 如图7 29所示 图7 29 不同浏览器对行高的
  • Vue Spring Boot大文件上传

    目录 前言 整体思路 前端 后端 代码实现 前端 后端代码 执行效果 总结 其他问题 网络中断 分片上传失败怎么办 如何实现秒传 服务器端多实例的情况 如何删除无用的分片 参考 前言 在项目中 上传大文件往往会遇上很多问题 比如 1 超时和
  • 十年开发经验教你如何高效学习 Python 的第三方库

    不然后面推送大家可能会看不到 这篇文章来自同学的提问 问题就是如何高效学习 Python 的第三方库 我在此总结如下 通用思路 整体思路从以下几个角度入手 阅读文档 第三方库通常都会有相应的文档 文档会介绍这个库的功能 使用方法等内容 所以
  • 安卓判断季度_2020年第1季度排名前5位的趋势安卓库

    安卓判断季度 机器人开发 ANDROID DEVELOPMENT We re almost at the end of the first quarter of 2020 and lots is happening in the Andro
  • Java 使用OSS 文件上传+下载 简单入门

    官方SDK文档 Java对象 文件 对象存储 阿里云帮助中心 开始使用OSS 阿里云对象存储OSS Object Storage Service 为您提供基于网络的数据存取服务 使用OSS 可以通过网络随时存储和调用包括文本 图片 音视频在
  • pyecharts-Timeline讲解时间线

    Pyecharts Timeline 作者 发现美的眼睛 本人 首先简单介绍一下pyecharts这个神奇的东东 如果你是从事web 那么Echarts就会熟悉知晓 如果不是 那么这篇文章也会推荐一个非常好的 python JavaScri
  • android studio连接真机调试

    前言 android studio使用模拟器调试感觉挺慢的 这次连接真机试下 打开手机USB调试功能 安装Google USB Driver 连接手机 指定驱动程序 选中手机 进行调试 打开手机USB调试功能 以小米Note9 pro为例
  • new动态创建数组?(new创建多维数组)

    在使用数组时我们难免会感觉数组的灵活性太低 所以new成了我们使用频率很高的一个操作符 int p 2 4 4 int p2 2 2 4 4 4 4 int p3 2 2 2 4 4 4 4 4 4 4 4 这是最常规的操作 接下来上new
  • Pytorch复现经典扩散模型DDPM&DDIM及分布式训练应用

    0 前言 当前 生成式人工智能 AIGC 已被越来越广泛应用在工业 动漫业 设计业等诸多场景 我们都知道现阶段主流的生成模型如生成对抗网络 GAN 自分编码器 VAE 流模型 Flow based Models 和扩散模型 Diffusio
  • 静态数码管显示、动态数码管显示(消隐)

    静态数码管显示 include
  • CentOS:Device eth0 does not seem to be present 问题解决方法

    使用Vmware克隆linux虚拟机后 常常是网络连接不上 表现为ifconfig无法看到网卡 即使改了 etc sysconfig network scripts 下的相应网卡文件onboot yes也不行 重启网络时 etc init
  • AABB和OBB包围盒简介

    一 AABB立方体边界框检测 用球体去近似地代表物体运算量很小 但在游戏中的大多数物体是方的或者长条形的 应该用方盒来代表物体 另一种常见的检测模型是立方体边界框 如图10 31展示了一个AABB检测盒和它里面的物体 坐标轴平行 Axial
  • Nginx反向代理负载均衡配置详解

    一 Nginx特性 Nginx使用可扩展的事件驱动 不是传统的过程驱动架构 在传统的Web服务器体系结构中 每个客户端连接作为一个单独的进程或线程处理 随着网站的流行度增加 并发连接数量的增加 Web服务器减慢 延迟了对用户的响应 从技术角
  • 【SpringBoot】简介及传统的 Spring 框架:对比和分析

    哈喽 哈喽 大家好 我是你们的老朋友 保护小周 今天给大家带来的是 SpringBoot 的简介 SpringBoot 项目的创建 相较于 Spring 框架的优点 1 快速的集成框架 2 内置运行容器 快速的部署项目 3 摒弃繁琐的 xm