SpringBoot及其特性
0.前言
Spring 框架提供了很多现成的功能。那么什么是 Spring Boot?使用 Spring 框架,我们可以避免编写基础框架并快速开发应用程序。为了让 Spring 框架提供基础框架,我们需要向 Spring 框架描述有关我们的应用程序及其组件的信息。
不只是我们的应用程序组件需要配置;甚至 Spring 框架提供的类也必须在 Spring 框架内配置为 Bean。

1.Spring配置
1.1.基于 XML 的配置:一种经典方法
- 我们可以向 Spring 框架提供有关我们类的配置信息的一种方法是使用基于 XML 的配置,特别是 Spring Bean 配置文件。当然,Spring 为我们处理了大部分过程,但一切都是需要付出代价的。我们需要提供大量有关我们的应用程序及其组件的信息,以便 Spring 理解并提供所需的功能。似乎在某个时候,我们可能会发现自己花费了大量时间来描述应用程序的细节。这会导致使用 Spring 框架时的复杂性增加,使人们难以使用。
- Spring Framework 开发人员注意到了这一现象,从而引入了使用注释配置应用程序信息的替代方法。以 XML 格式编写配置可能很麻烦、容易出错且耗时,因为它很复杂。因此,Spring 通过使用注释引入了基于 XML 的配置的替代方案。
1.2.原型注释:一次飞跃
- Spring 引入了原型注释,以加快 Spring 框架中应用程序类的配置。诸如@Repository、@Service、@Controller、@RestController、@Autowired、@Qualifier等注释可直接应用于@Component我们的应用程序类。这种方法可帮助我们绕过基于 XML 的配置。
- 然而,有时我们需要将 Spring Framework 本身或第三方库提供的类合并到我们的应用程序中。在这些情况下,我们可能无法访问这些类的源代码。因此,我们不能直接将构造型注释应用于这些类。
- 现在,开发应用程序的主要方法是对具有源代码的类使用构造型注释,而对没有可用源代码的框架或第三方库则依赖 Spring Bean 配置。这种组合需要同时使用 Spring Bean 配置和构造型注释。然而,我们似乎还没有完全解决最初的问题。为了解决这个问题,Spring 引入了 Java 配置方法。
- 现在,开发应用程序的唯一方法是为我们的类(具有源代码)编写 Stereotype 注释,并使用 Spring Bean 配置框架或第三方库(没有源代码)。这种组合涉及同时使用Spring Bean Configuration和Stereotype注释。
- 但是,我们似乎还没有完全克服最初的问题。为了解决这个问题,Spring引入了这种Java Configuration方法。
1.3.Java 配置:补足差距
Spring 引入了 Java 配置方法,无需在 Spring Bean 配置文件中配置没有源代码的类,我们可以在单独的 Java 配置类中编写它们的配置。
优点:
无需记住配置的 XML 标签。类型安全的配置。然而,Java 配置方法似乎并未完全解决这个问题。这是因为,除了 XML 之外,我们现在还需要在框架组件的配置中编写大量代码。Java 配置方法似乎并没有提供比基于 XML 的配置更好的替代方案。开发人员对需要编写大量代码感到沮丧。
除了简化 Spring 框架集成之外,Spring Boot 还提供内置功能,用于执行将应用程序打包为独立 JAR、设置嵌入式 Web 服务器以及管理应用程序依赖项等任务,使其成为快速开发和部署的综合工具。
2.SpringBoot的功能
2.1.自动配置:
在使用 Spring Framework 开发应用程序期间,不仅仅是我们的应用程序组件需要在 IoC(控制反转)容器内以 bean 定义的形式进行配置。以这种方式配置 Spring Framework 类似乎需要大量信息,从而导致更复杂且耗时的开发过程。这就是自动配置概念发挥作用的地方。
开发人员和框架创建者都了解配置框架组件所需的属性和值。鉴于这种共同的理解,人们可能会质疑为什么框架本身不会自动配置其组件以促进我们应用程序的运行。这就是自动配置的本质。
尤其是 Spring Boot,它采用了一种固定的方法来自动配置框架组件。它会扫描我们应用程序的类路径中存在的库并推断出必要的框架组件。它负责为这些组件配置适当的默认值。
例如,如果 Spring Boot 检测到类路径中存在“spring-jdbc”库并识别出正在使用的数据库驱动程序(在本例中假设为“h2”),它将继续配置基本 bean 定义,例如DriverManagerDataSource、DataSourceTransactionManager和JdbcTemplate,所有这些都设置为“h2”数据库的默认值。
如果要求偏离这些默认值,Spring Boot 会无缝地适应程序员在配置框架组件时的输入。
通过利用自动配置的强大功能,开发人员可以轻松地深入编写应用程序的核心业务逻辑,而 Spring Boot 则负责处理复杂的框架组件。
本质上,自动配置减轻了手动配置的负担,自动使用为应用程序量身定制的默认设置来设置 Spring Framework 组件。这样,开发人员就无需再为其应用程序微调 Spring Framework。
2.2. 启动依赖项
Spring Boot 提供了 Maven 原型,旨在加快项目依赖项的配置。这些原型称为“引导启动器依赖项”,可根据所选的 Spring Framework 版本将 Spring Framework 模块和外部库依赖项与适当的版本对齐,从而简化 Spring Framework 模块和外部库依赖项的整合。
在开发基于 Spring Framework 的应用程序时,开发人员需要配置项目将使用的依赖项。这项任务通常很繁琐,涉及排除依赖项故障和查找兼容版本的潜在挑战。此外,这不仅涉及设置外部库类,还涉及辨别各个 Spring Framework 模块之间的版本兼容性。
此外,当考虑将应用程序迁移到更高或更新的 Spring Framework 版本时,必须重新审视调试和识别依赖项的精确版本的整个过程。
为了应对这些挑战并简化设置 Spring Framework 项目及其兼容依赖项(包括第三方依赖项)的过程,Spring Boot 引入了“启动依赖项”的概念。
对于每种项目类型或技术,Spring Boot 都提供了专用的启动器。这些启动器可以无缝集成到 Maven 或 Gradle 项目中。这样,Spring Boot 就承担起了整合必要的 Spring 相关模块和外部库的责任,所有这些都配备了兼容的版本。
2.3.执行器端点:
使用 Spring Boot,我们能够开发从开发顺利过渡到生产级部署的应用程序。Actuator Endpoints是一项强大的功能,它提供了各种内置端点,包括健康检查、指标评估、内存洞察等功能。重要的是,这些端点可以轻松启用,从而方便在生产环境中部署应用程序。这样就无需添加额外的代码来确保应用程序适合生产部署。
Spring Boot 显著简化了应用程序开发过程,使其更加高效和易于管理。其突出特点之一是包含执行器端点。这些端点是运行时监视和管理应用程序的重要工具。它们为应用程序的运行状况、性能和其他方面提供了宝贵的见解。
例如,“健康”端点支持实时健康检查,使管理员能够及时发现任何问题。“指标”端点提供了一套全面的指标,有助于进行性能分析。此外,“内存”端点提供有关内存使用情况的信息,这对于优化资源分配至关重要。
Actuator Endpoints 的优点在于其开箱即用和易于集成。只需启用所需的端点,开发人员就可以访问有关应用程序的宝贵信息,而无需编写额外的代码。这不仅节省了时间,还提高了在不同环境中管理和监控应用程序的效率。
2.4.DevTools【开发特性】
借助 DevTools,代码调试变得非常高效。通常,当我们在开发过程中修改代码时,我们不得不重新部署并重新启动应用服务器。不幸的是,这个过程会耗费大量的开发时间。然而,DevTools 带来了令人耳目一新的变化。它确保我们所做的任何代码更改都能无缝反映出来,而无需完全重新启动应用服务器。相反,DevTools 会动态地将我们更改的特定类重新加载到 JVM 内存中。这种智能功能大大缩短了调试时间,促进了更顺畅、更高效的开发过程。
2.5. 嵌入式容器
嵌入式容器的概念是一项显著的功能,它增强了开发过程。在这种方法中,服务器作为库集成到项目中。因此,您可以直接从代码库执行项目。无需外部安装容器,也无需繁琐的打包和部署到单独服务器的过程。这种简化的方法大大加快了应用程序开发的开发和质量保证阶段。
2.6.Spring Boot CLI:
Spring Boot 命令行界面 (CLI) 引入了一个强大的工具,可以快速开发和执行原型代码。通过利用 Spring CLI,您可以非常轻松地编写 Spring Framework 代码,类似于创建 RestController。然后可以使用 CLI 快速执行此代码。
此 CLI 可用作 shell,可以方便地安装在本地计算机上。它使您能够快速编写和运行 Spring Framework 代码,而无需进行大量设置或配置。Spring Boot CLI 的主要目标是促进原型和实验代码的快速执行。这种快速的开发过程在测试和验证新概念或想法时显著提高了敏捷性。
3.SpringBoot的功能优势
- 快速启动体验: Spring Boot 为构建 Spring Framework 应用程序提供了无缝起点,加快了设置过程。
- 快速应用程序开发:借助 Spring Boot 的简化方法,开发人员可以快速开发应用程序,从而提高效率和生产力。
- 自动配置:自动配置功能可使用默认设置高效地配置框架组件。在需求不同的情况下,简单的配置可轻松调整组件。
- 生产级部署: Spring Boot 支持部署符合生产级标准的应用程序,确保稳定性和可靠性。
- 增强的非功能性方面:除了核心功能之外,Spring Boot 还解决了应用程序开发的非功能性方面。这包括调试、开发期间自动重启以及用于指标和内存管理的强大工具等功能。
本质上,Spring Boot 通过提供一系列简化流程、增强生产准备和增强开发体验的功能,彻底改变了 Spring Framework 应用程序开发。
相关文章:
SpringBoot及其特性
0.前言 Spring 框架提供了很多现成的功能。那么什么是 Spring Boot?使用 Spring 框架,我们可以避免编写基础框架并快速开发应用程序。为了让 Spring 框架提供基础框架,我们需要向 Spring 框架描述有关我们的应用程序及其组件的信息。 不只是…...
「JavaEE」初识进程
初识进程 🍉进程🍌操作系统的进程管理 🍉PCB 重要属性🍌进程的身份标识🍌内存指针🍌文件描述符表🍌进程的状态🍌优先级🍌记账信息🍌上下文 🍉内存…...
计算机视觉——图像特征提取D2D先描述后检测特征提取算法原理
概述 局部特征提取是计算机视觉中的一个重要任务,它旨在从图像中提取出能够代表图像局部结构和外观信息的特征。这些特征通常用于图像匹配、物体识别、三维重建、跟踪和许多其他应用。传统方法,如尺度不变特征变换(SIFT)…...
The “from“ argument must be of type string. Received undefined——vue报错记录
今天在用机器人打包测试环境时,一直报错: The "from" argument must be of type string. Received undefined 啥意思呐? 百度也没有找到对应的问题所在。 下面写一下我的解决方法: vue.config.js 在vue.config.js中…...
汽车4S行业的信息化特点与BI建设挑战
汽车行业也是一个非常大的行业,上下游非常广,像主机厂,上游的零配件,下游的汽车流通,汽车流通之后的汽车后市场,整个链条比较长。今天主要讲的是汽车流通,汽车4S集团。一个汽车4S集团下面授权代…...
JSX 和 HTML 之间的区别
JSX和 HTML 都是用于创建和构建网页的标记语言,但它们有一些关键的区别。 1. JSX 是 JavaScript 的语法扩展,而 HTML 是一种标记语言。 2. JSX 允许您在语法中包含表达式和函数,而 HTML 只允许静态文本。 3. JSX 通常用于 React 应用程序&…...
AI日报:GPT-4-Turbo正式版自带读图能力;Gemini1.5Pro开放API;SD3将于4月中旬发布;抖音宫崎骏AI特效爆火
欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 ὏…...
IDEA 宝贝插件
1. Codota— 代码智能提示 Codota还包含一个网站:https://www.codota.com/code 2.Alibaba Java Code Guidelines— 阿里巴巴 Java 代码规范 3. SequenceDiagram —— 调用链路自动生成时序图 4. google-java-format —— 代码自动格式化...
[C语言][数据结构][链表] 单链表的从零实现!
目录 零.必备知识 1.一级指针 && 二级指针 2. 节点的成员列表 a.数据 b.指向下一个节点的指针. 3. 动态内存空间的开辟 (malloc-calloc-realloc) 一.单链表的实现与销毁 1.1 节点的定义 1.2 单链表的尾插 1.3 单链表的头插 1.4 单链表的尾删 1.5 单链表的头删 1…...
oracle rac打补丁后sqlplus / as sysdba ora-12537
sqlplus / as sysdba 报错: ORA-12537: TNS:connection closed 检查用户属组: [rootrac1 ~]# id oracle uid1102(oracle) gid1101(oinstall) groups1101(oinstall),1102(dba) [rootrac1 ~]# id grid uid1101(grid) gid1101(oinstall) groups1101(oin…...
TCP-IP详解卷一:协议——阅读总结
该内容适合程序员查看 第1章 概述 1.1 引言 WAN全称是 Wide Area Network,中文名为广域网。 LAN全称是 Local Area Network,中文名为局域网。 1.2分层 ICP/IP协议族通常被认为是一个四层协议系统 分层协议应用层Telnet、FTP和e-mail运输层TCP和UDP网…...
【带源码】如何开发一个视频打赏,付费观看视频的系统?
【带源码】如何开发一个视频打赏,付费观看视频的系统?开发指南来了 最近非常火爆的视频打赏系统,有用户端,管理端,代理端 风口来了,系统部署简单,需要详细部署教程的可以留下评论哦!…...
Linux--进程的概念(一)
目录 一、冯诺依曼体系结构二、操作系统2.1 什么是操作系统2.2 操作系统的意义 三、进程3.1 进程的基本概念3.2 描述进程——PCB3.3 进程和程序的区别3.4 task_struct-PCB的一种3.5 task_struct的内容分类 四、如何查看进程4.1 通过系统文件查看进程4.2 通过ps指令查看进程 五、…...
大话设计模式——15.观察者模式(Observer Pattern)
简介 也称发布订阅模式(Publish/Subscribe),定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 UML图: 应用场景: 消息通知组件&#x…...
MySQL 主从复制部署(8.0)
什么是主从数据库 主从数据库是一种数据库架构模式,通常用于提高数据库的性能、可用性和可伸缩性。 它包括两种类型的数据库服务器: 1)主数据库(Master):主数据库是读写数据的主要数据库服务器。所有写操…...
大话设计模式——16.命令模式(Command Pattern)
简介 请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的对象进行执行。命令模式是一种特殊的策略模式,体现多个策略执行的问题,而不是选择的问题 UML图 应用场景 界面选择、键盘、按钮、事件操作都类似命令模式 …...
react17+18 中 setState是同步还是异步更新
在类组件中使用setState,在函数式组件中使用hooks的useState。 setstate目录 1. 类组件1.1 react 17版本1.2 react 18版本 2、函数式组件 1. 类组件 1.1 react 17版本 参考内容:第十一篇:setState 到底是同步的,还是异步的&…...
Unity框架,ET框架8.1版本的打包流程记录
目录 打包代码前置1.必须要安装Visusal Studio 2022的组件,如下图,必须都要进行安装,不然会在代码重构的时候报错,丢失SDK。Rider的版本必须2023及以上 步骤一、使用Rider编辑器打开项目后进行重构项目步骤二、使用HybirdCLR生成A…...
windows访问wsl中的docker
1、启动windows路由转发功能: 找到任务管理器 --》服务–》打开服务–》 ROUTing and Remote Access 2、关闭wsl中linux的防火墙 3、查看docker系统和linux系统的ip和网关 以下面为例 # docker系统 eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu…...
golang主要优缺点
优点 1)采用协程机制,可以很方便的支持高并发,性能还不错。 2)非常易于使用,产出效率很高。 缺点 也是协程机制。程序中一切皆协程,并且自己做了协程调度机制,而不是传统的 线程机制。导致需…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
