当前位置: 首页 > news >正文

Spring Boot: 约定优于配置的软件设计思想

文章目录

    • 传统Spring框架的繁琐配置
      • 1. **管理jar包依赖**
      • 2. **维护web.xml**
      • 3. **维护Dispatch-Servlet.xml配置项**
      • 4. **应用部署到Web容器**
      • 5. **第三方组件集成到Spring IOC容器中的配置项维护**
    • Spring Boot的简化与自动化
      • 1. Spring Boot Starter启动依赖
      • 2. 自动装配机制
      • 3. 默认加载的配置文件
    • 约定优于配置的综合体现

在软件开发领域,有一种设计范式被广泛应用,那就是"约定优于配置"(Convention Over Configuration)。这个设计理念的核心思想是减少开发人员对于配置项的维护,使其能够更专注于业务逻辑的开发。Spring Boot是这一理念下的杰出产物,类似于Spring框架下的一个脚手架,为基于Spring生态的应用程序提供了快速开发的能力。

传统Spring框架的繁琐配置

在传统的Spring框架中,开发Web应用程序往往需要处理大量与业务逻辑无关的繁琐配置,这包括但不限于:

  • 管理jar包依赖
  • 维护web.xml
  • 维护Dispatch-Servlet.xml配置项
    • 配置DispatcherServlet及其相关的配置项
  • 应用部署到Web容器
  • 第三方组件集成到Spring IOC容器中的配置项维护

这些配置不仅使得项目结构变得复杂,而且增加了开发的复杂度和维护的难度。
在传统的Spring框架中,这些任务通常需要手动配置,但是Spring Boot通过其约定优于配置的设计理念,大大简化了这些任务,使得开发者不再需要手动处理绝大部分的配置。

1. 管理jar包依赖

在传统的Java项目中,你可能需要手动管理JAR包的依赖关系,但在Spring Boot中,你可以使用Maven或Gradle等构建工具来管理依赖。Spring Boot提供了一些称为"Starters"的依赖,它们是预配置的依赖集合,你只需要引入相关的Starter,Spring Boot就会自动配置所需的依赖项。

例如,如果你正在开发一个Spring Boot Web应用,只需在pom.xml中添加以下依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

Spring Boot的Starters会自动管理所需的jar包版本,无需手动指定。

2. 维护web.xml

在传统的Java Web项目中,web.xml文件通常用于配置Servlet、Filter、Listener等。在Spring Boot中,大部分的配置都被隐式处理,不再需要web.xml。Spring Boot会自动注册DispatcherServlet,无需显式配置。如果需要定制一些Servlet或Filter,你可以使用ServletRegistrationBeanFilterRegistrationBean等类来进行配置。

3. 维护Dispatch-Servlet.xml配置项

在Spring Boot中,不再需要显式创建和维护Dispatch-Servlet.xml配置文件。Spring Boot的配置通常是基于Java配置或者通过application.propertiesapplication.yml文件实现的。例如,可以使用@Controller注解替代<bean>配置,而@RequestMapping注解替代URL映射的配置。

4. 应用部署到Web容器

Spring Boot应用程序可以打包成可执行的JAR文件,其中包含了嵌入的Web服务器(如Tomcat、Jetty等)。这种方式使得部署变得极为简单,只需将JAR文件拷贝到服务器上并运行即可,无需额外配置外部的Web容器。

5. 第三方组件集成到Spring IOC容器中的配置项维护

在Spring Boot中,第三方组件的集成通常是通过Starters或自动配置来实现的。Spring Boot会自动扫描类路径,发现并自动配置需要的组件。如果需要对某些配置进行定制,可以使用@Configuration和相关注解,或者通过application.propertiesapplication.yml文件进行配置。

Spring Boot的简化与自动化

Spring Boot通过"约定优于配置"的理念,极大地简化了这些繁琐的配置,让开发者能够更专注于业务逻辑的实现。以下是Spring Boot如何体现这一理念的一些关键点:

1. Spring Boot Starter启动依赖

Spring Boot引入了Starter的概念,它能够帮助我们管理所有jar包的版本。如果我们的应用依赖于Spring MVC相关的jar包,Spring Boot会自动内置Tomcat容器来运行Web应用,无需开发者单独进行应用部署。

2. 自动装配机制

Spring Boot的自动装配机制通过扫描约定路径下的spring.factories文件,识别配置类并实现Bean的自动装配。这大大减少了手动配置的需求,让开发者摆脱重复性的劳动。

3. 默认加载的配置文件

Spring Boot默认加载一些常用的配置文件,比如application.properties等,使得开发者不必手动指定所有的配置项,降低了配置的负担。

约定优于配置的综合体现

总的来说,Spring Boot通过一系列的约定和默认配置,使得开发者能够更高效、更便捷地开发和维护应用程序。这种设计思想不仅提高了开发效率,也促使开发者遵循一些最佳实践,使得项目结构更加清晰,易于理解和维护。

"约定优于配置"不仅仅是Spring Boot的特色,更是一个常见的软件设计思想,旨在实现更高效、更便捷的软件系统的开发和维护。在使用Spring Boot的过程中,我们可以更专注于业务逻辑,而不必被繁琐的框架配置所困扰。

通过采用"约定优于配置"的理念,Spring Boot为开发者提供了一种更愉快的开发体验,让我们能够更专注于创造出更出色的应用程序。


这只是一个简单的示例,你可以根据实际情况扩展和修改。博客的结构可以根据需要进行调整,确保清晰地传达了"约定优于配置"在Spring Boot中的体现。

相关文章:

Spring Boot: 约定优于配置的软件设计思想

文章目录 传统Spring框架的繁琐配置1. **管理jar包依赖**2. **维护web.xml**3. **维护Dispatch-Servlet.xml配置项**4. **应用部署到Web容器**5. **第三方组件集成到Spring IOC容器中的配置项维护** Spring Boot的简化与自动化1. Spring Boot Starter启动依赖2. 自动装配机制3.…...

TCP触发海康扫码相机S52CN-IC-JQR-NNN25

PC环境设置 为保证客户端正常运行以及数据传输的稳定性&#xff0c;在使用客户端软件前&#xff0c;需要对 PC 环境 进行设置 关闭防火墙 操作步骤如下&#xff1a; 1. 打开系统防火墙。 2. 在自定义设置界面中&#xff0c;选择关闭防火墙的对应选项&#xff0c;并单击…...

ArcGIS:如何迭代Shp文件所有要素并分别导出为Shp文件?

01 前言 尝试用IDL实现&#xff0c;奈何又涉及新的类IDLffShape&#xff0c;觉得实在没有必要学习的必要&#xff0c;毕竟不是搞开发&#xff0c;只是做做数据处理&#xff0c;没必要拿IDL不擅长的且底层的东西自己造轮子。 这里想到使用Python去解决&#xff0c;gdal太久没用…...

[工业自动化-11]:西门子S7-15xxx编程 - PLC从站 - 分布式IO从站/从机

目录 一、什么是以分布式IO从站/从机 二、分布式IO从站的意义 三、ET200分布式从站系列 一、什么是以分布式IO从站/从机 在工业自动化领域中&#xff0c;分布式 IO 系统是目前应用最为广泛的一种 I/O 系统&#xff0c;其中分布式 IO 从站是一个重要的组成部分。 分布式 IO …...

Linux技能篇-yum源搭建(本地源和公网源)

文章目录 前言一、yum源是什么&#xff1f;二、使用镜像搭建本地yum源1.搭建临时仓库第一步&#xff1a;挂载系统ios镜像到虚拟机第二步&#xff1a;在操作系统中挂载镜像第三步&#xff1a;修改yum源配置文件 2.搭建本地仓库第一步&#xff1a;搭建临时yum源来安装httpd并做文…...

电脑清灰涂硅脂后电脑CPU温度不降反升

目录 一.问题描述二.问题解决三.拆机注意事项四.影响散热的主要因素说明1.通风差2.硅脂材料差3.硅脂涂抹方式错误 一.问题描述 电脑型号&#xff1a;暗影精灵5 测温工具&#xff1a;硬件狗狗&#xff08;只要是测温软件都可以&#xff0c;比如omen hub和Core Temp…&#xff0…...

吴恩达《机器学习》8-1->8-2:非线性假设、神经元和大脑

一、非线性假设 在之前学到的线性回归和逻辑回归中&#xff0c;存在一个缺点&#xff0c;即当特征数量很多时&#xff0c;计算的负荷会变得非常大。考虑一个例子&#xff0c;假设我们使用 &#x1d465;₁, &#x1d465;₂ 的多项式进行预测&#xff0c;这时我们可以很好地应…...

services.Jenkins Additional property tags is not allowed

今天需要给Jenkins server添加几个tag&#xff0c;于是就在docker的compose文件中添加了如下的tags&#xff0c; version: "3.9" services:jenkins:image: testbuild: context: services/jenkinsargs:- jenkins_version2.346.2- plugin_cli_version2.9.3volumes:- j…...

vColorPicker——基于 Vue 的颜色选择器插件

文章目录 前言样例特点 一、使用步骤&#xff1f;1. 安装2.引入3.在项目中使用 vcolorpicker 二、选项三、事件 前言 vColorPicker——官网 vColorPicker——GitHub 样例 vColorPicker是基于 Vue 的一款颜色选择器插件&#xff0c;仿照Angular的color-picker插件制作 特点 …...

Direct3D粒子系统

粒子和点精灵 粒子(是种微小的物体,在数学上通常用点来表示其模型。所以显示粒子时,使用点图元(由 D3 DPRIMITIVETYPE类型的D3 DPT POINTLIST枚举常量表示)是一个很好的选择。但是光栅化时,点图元将被映射为一个单个像素。这样就无法为我们提供很大的灵活性,因为实际应用…...

第24章_mysql性能分析工具的使用

文章目录 1. 数据库服务器的优化步骤2.查看系统性能参数3. 统计SQL的查询成本&#xff1a;last_query_cost4. 定位执行慢的 SQL&#xff1a;慢查询日志4.1 开启慢查询日志参数4.2 查看慢查询数目4.3 测试慢sql语句&#xff0c;查看慢日志4.4 系统变量 log_output&#xff0c; l…...

【Git】Merge/Rebase/Cherriy-Pick的区别

Git Merge/Rebase/Cherriy-Pick的区别 Git merge、Git Rebase、Git Cherry-pick是Git 常用的三个命令,可以用于分支合并、纳入提交等。 那么它们三个的区别以及共同点是什么? 了解这些可以帮我们更好理解Git的工作原理,进而学习它的一些设计思想。 git merge xxx-branch g…...

Python复习:序列(列表元组字符串)

Python复习 Python复习序列&#xff08;列表元组字符串&#xff09;列表定义列表增删改查列表的切片列表的一些常用操作符元组字符串 Python复习 序列&#xff08;列表元组字符串&#xff09; 列表元组字符串有一些同样的特点&#xff0c;所以放在一起复习。例如切片操作 列…...

DevChat助力成为软件开发的“钢铁侠”

一、背景介绍&#xff1a; 随着人工智能ChatGPT的发展&#xff0c;ChatGPT 的开放将推动人工智能在各个行业的应用&#xff0c;带来诸多的变革和提高&#xff0c;曾经一段时间也是担心对软件行业的影响&#xff0c;会不会以后就不需要这么多程序员了&#xff0c;实际上在当下&…...

c: struct sort descending and ascending in windows and Ubuntu

/*** file StudentStructSort.h* author geovindu,Geovin Du,涂聚文 (geovindu163.com)* ide: vscode c11,c17 Ubuntu 22.4* brief 结构体排序示例* date 2023-11-05* version 0.1* copyright geovindu 站在巨人的肩膀上 Standing on the Shoulders of Giants**/#ifnd…...

Python - 利用 OCR 技术提取视频台词、字幕

目录 一.引言 二.视频处理 1.视频样式 2.视频截取 ◆ 裁切降帧 ◆ 处理效果 3.视频分段 三.OCR 处理 1.视频帧处理 2.文本识别结果 3.后续工作与优化 ◆ 识别去重 ◆ 多线程提效 ◆ 片头片尾优化 四.总结 一.引言 视频经常会配套对应的台词或者字幕&#xff0c…...

VUE页面导出PDF方案

1&#xff0c;技术方案为&#xff1a;html2canvas把页面生成canvas图片&#xff0c;再通过jspdf生成PDF文件&#xff1b; 2&#xff0c;安装依赖&#xff1a; npm i html2canvas -S npm i jspdf -S 3&#xff0c;封装导出pdf方法exportPdf.js: // 页面导出为pdf格式 //titl…...

机器学习笔记 - WGAN生成对抗网络概述和示例

一、简述 Wasserstein GAN或WGAN是一种生成对抗网络,它最小化地球移动器距离 (EM) 的近似值,而不是原始 GAN 公式中的 Jensen-Shannon 散度。与原始 GAN 相比,它的训练更加稳定,模式崩溃的证据更少,并且具有可用于调试和搜索超参数的有意义的曲线。 Wasserstein 生成对抗网…...

HoudiniVex笔记_P0_Houdini中文文档与翻译

1、19.0版本中文说明文档 链接&#xff1a;https://pan.baidu.com/s/1oJcX5pdnBZ_YWWwOSnFB5g?pwdz3tw 提取码&#xff1a;z3tw 2、翻译插件 有上网条件的同学可以试试这个翻译插件&#xff1a;双语网页翻译 - 电子书翻译 - PDF翻译 - 字幕文件翻译浏览器扩展 | 沉浸式翻译…...

基于PowerWord的储能在主动配电网中的仿真研究

摘要 主动配电网是智能配电网技术发展的高级阶段&#xff0c;分布式储能是主动配电网的重要组成部分&#xff0c;分布式储能的应用对主动配电网的规划、运行、网络拓扑、故障处理和保护、可再生能源电源的协调优化等方面带来不容忽视的影响&#xff0c;针对这一现状&#xff0c…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...