Spring Boot 框架介绍及 Spring Boot 与 Spring 实现对比

在日常 Java Web 开发中,Spring 框架几乎是绕不开的技术体系。传统的 Spring 项目因其灵活强大而被广泛应用,但随着项目规模扩大与业务复杂度提升,XML 配置繁琐、部署复杂等问题逐渐显现。为此,Spring Boot 应运而生。

Spring Boot 作为对 Spring 框架的进一步封装,不仅大幅简化了配置与依赖管理,还通过自动化机制提升了开发效率,成为现代企业应用和微服务架构的首选。

本文将围绕 Spring Boot 的基本概念、优势特性、项目创建流程,结合具体示例,对比传统 Spring 与 Spring Boot 项目的实现方式,帮助读者清晰掌握两者的核心区别与使用场景。


文章目录

      • 1、Spring Boot 介绍
        • 1.1、什么是 Spring Boot
        • 1.2、Spring Boot 的核心优势
        • 1.3、使用 Spring Initializr 创建项目
      • 2、传统 Spring 项目实现
        • 2.1、配置文件
        • 2.2、Controller 类
      • 3、Spring Boot 项目实现
        • 3.1、项目结构生成方式
        • 3.2、主类入口
        • 3.3、Controller 类
        • 3.4、配置文件
        • 4、Spring VS SpringBoot
        • 4.1、对比总览
        • 4.2、Maven 依赖对比(核心部分)
        • 4.3、实例对比:登录接口
        • 4.4、启动方式对比
      • X、后记


1、Spring Boot 介绍

1.1、什么是 Spring Boot

Spring Boot 是由 Pivotal 团队 提供的一个全新框架,旨在简化 Spring 应用的初始化搭建与开发过程。
它基于 Spring 框架,采用约定优于配置的理念,通过自动配置和内嵌服务器,让开发者可以快速启动项目并专注于业务逻辑的实现。

Spring Boot 集成了大量常用第三方库的配置,极大地减少了重复的样板代码和复杂配置。

1.2、Spring Boot 的核心优势

快速搭建项目:

  • 通过 Spring Initializr 工具,开发者可以快速生成项目骨架。
  • 预集成常用依赖(如 Web、数据库、缓存、安全等),大幅减少手动配置和环境准备时间。

自动配置(Auto Configuration):

  • 根据添加的依赖和类路径中的内容,Spring Boot 会智能推断并完成配置。
  • 开发者无需显式定义 Bean 或 XML,大量默认配置可直接使用。

内嵌式服务器:

  • 支持内嵌的 Tomcat、Jetty、Undertow,无需单独部署 Web 服务器。
  • 可以通过 main() 方法直接启动应用,极大简化开发和测试流程。

生产就绪(Production Ready):

  • 提供如健康检查(Health Check)、应用指标(Metrics)、日志追踪等功能。
  • 与 Spring Boot Actuator 集成后,便于监控和运维支持。
1.3、使用 Spring Initializr 创建项目

以下是通过 Spring Initializr 创建一个简单 Spring Boot 项目的步骤:

打开 Spring Initializr

访问地址:https://start.spring.io

填写项目信息

  • 选择构建工具:Maven 或 Gradle
  • 选择开发语言:Java、Kotlin 或 Groovy
  • 选择 Spring Boot 版本(建议使用稳定版)

添加项目依赖

例如:

  • Spring Web:用于构建 RESTful API 或 Web 应用
  • Spring Boot DevTools:支持热部署
  • Lombok:简化 Java Bean 编写
  • Spring Data JPA:操作数据库

生成项目

  • 点击 “Generate” 按钮,下载项目压缩包
  • 解压后导入到 IDE(如 IntelliJ IDEA、Eclipse)中,即可开始开发

2、传统 Spring 项目实现

2.1、配置文件

配置文件(applicationContext.xml):

<context:component-scan base-package="com.example"/>
<context:annotation-config/>

配置文件(web.xml):

<web-app><context-param name="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/dispatcher-servlet.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
2.2、Controller 类
@Controller
public class LoginController {@RequestMapping(value = "/login", method = RequestMethod.POST)@ResponseBodypublic String login(@RequestParam String username, @RequestParam String password) {if ("admin".equals(username) && "123".equals(password)) {return "Login success";}return "Login failed";}
}

3、Spring Boot 项目实现

3.1、项目结构生成方式

使用 Spring Initializr 快速生成项目,勾选 Web 模块。

3.2、主类入口

主类入口(Application.java):

@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
3.3、Controller 类
@RestController
public class LoginController {@PostMapping("/login")public String login(@RequestParam String username, @RequestParam String password) {if ("admin".equals(username) && "123".equals(password)) {return "Login success";}return "Login failed";}
}
3.4、配置文件

配置文件(application.properties):

server.port=8080

4、Spring VS SpringBoot

从上面的用例可以看到,传统 Spring 项目与 Spring Boot 项目在配置方式、启动方式、开发效率等方面存在显著差异。

传统 Spring 项目依赖 XML 配置(如 web.xmlapplicationContext.xml),启动需部署至外部 Web 容器,如 Tomcat,项目结构较为复杂,依赖管理手动繁琐。

而 Spring Boot 项目强调 “约定优于配置”,通过注解和自动配置简化开发流程,内嵌容器支持一键启动,依赖通过 starter 管理统一引入,极大提升开发效率和维护性。

两者在功能上可以实现相同目标,但 Spring Boot 更适合现代微服务和敏捷开发场景。

4.1、对比总览

image-20250417114230864

4.2、Maven 依赖对比(核心部分)

Spring(还需引入 javax.servlet-api,Jackson、日志等依赖(手动)):

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.32</version>
</dependency>

Spring Boot(自动带上:Tomcat、Jackson、日志、异常处理、JSON 序列化等):

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version>
</parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
4.3、实例对比:登录接口

传统 Spring Controller(需要搭配:web.xml 配置 DispatcherServletapplicationContext.xml 配置组件扫描):

@Controller
public class LoginController {@RequestMapping(value = "/login", method = RequestMethod.POST)@ResponseBodypublic String login(@RequestParam String username, @RequestParam String password) {return "admin".equals(username) && "123".equals(password) ? "Login success" : "Login failed";}
}

Spring Boot Controller(无需额外配置,直接运行,路径自动映射,开发体验极佳):

@RestController
public class LoginController {@PostMapping("/login")public String login(@RequestParam String username, @RequestParam String password) {return "admin".equals(username) && "123".equals(password) ? "Login success" : "Login failed";}
}
4.4、启动方式对比

Spring:没有 main() 方法。启动依赖 Tomcat,必须通过 war 包部署

启动流程:

Tomcat -> 读取 web.xml -> 初始化 DispatcherServlet -> 读取 applicationContext.xml -> 启动

Spring Boot:直接运行 main 方法

@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

X、后记

通过本篇文档的学习,相信你已经对 Spring Boot 的框架特性与传统 Spring 项目的差异有了系统认识。Spring Boot 不是对 Spring 的替代,而是在其之上提供了更高层次的封装与工程化支持,使得项目开发更快速、配置更简洁、部署更方便。

在微服务化、云原生架构日益流行的今天,掌握 Spring Boot 已成为 Java 开发者的重要技能之一。希望本文所提供的对比与实战内容,能为你在项目选型和技术演进中提供有力参考。

如果你想进一步深入,可以继续探索 Spring Boot 与 Spring Cloud 的整合、Spring Boot 的 Actuator、自动化测试、安全模块等内容,挖掘更多实用功能与最佳实践。

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

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

相关文章

基于CNN卷积神经网络和GEI步态能量提取的视频人物步态识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 GEI步态能量提取 4.2 CNN卷积神经网络原理 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b/matlab2022a 3.部分核心程序 &…

创建型模式:建造者模式

什么是建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它将一个复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。简单来说&#xff0c;建造者模式允许您一步一步创建复杂对象&#xff0c;而…

Linux `init 5` 相关命令的完整使用指南

Linux init 5 相关命令的完整使用指南—目录 一、init 系统简介二、init 5 的含义与作用三、不同 Init 系统下的 init 5 行为1. SysVinit&#xff08;如 CentOS 6、Debian 7&#xff09;2. systemd&#xff08;如 CentOS 7、Ubuntu 16.04&#xff09;3. Upstart&#xff08;如 …

RabbitMQ常见面试题回答重点

文章目录 什么是消息队列&#xff1f;为什么需要消息队列消息队列的模型消息队列常见名词如何保证消息不丢失&#xff1f;&#xff08;可靠性&#xff09;如何保证消息不重复/业务幂等性如何保证消息有序性如何处理消息堆积消息队列设计为推送还是拉取 / 推拉模式优点无法路由的…

欣佰特携数十款机器人相关前沿产品,亮相第二届人形机器人和具身智能行业盛会

2025年4月15日至16日&#xff0c;备受关注的第二届中国人形机器人与具身智能产业大会已在北京成功举行。作为国内前沿科技及产品服务领域的重要参与者&#xff0c;欣佰特科技携众多前沿产品精彩亮相&#xff0c;全方位展示了其在人形机器人与具身智能领域的创新产品。 在本次大…

Docker安装 (centos)

1.安装依赖包&#xff1a; sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2.删除已有的 Docker 仓库文件&#xff08;如果有&#xff09;&#xff1a; sudo rm -f /etc/yum.repos.d/docker-ce.repo 3.添加阿里云的 Docker 仓库&#xff1a; sudo yum…

Vue接口平台学习十——接口用例页面2

效果图及简单说明 左边选择用例&#xff0c;右侧就显示该用例的详细信息。 使用el-collapse折叠组件&#xff0c;将请求到的用例详情数据展示到页面中。 所有数据内容&#xff0c;绑定到caseData中 // 页面绑定的用例编辑数据 const caseData reactive({title: "",…

服务器数据迁移指南

服务器数据迁移是将数据从一台服务器转移到另一台服务器的过程&#xff0c;可能是为了硬件升级、云迁移、数据中心搬迁或服务整合。 以下是数据迁移的关键步骤和注意事项&#xff1a; 迁移前准备 制定迁移计划 确定迁移范围(全量/增量) 评估数据量和网络带宽 制定时间表和回…

25.解决中医知识问答删除历史对话功能后端处理请求时抛出异常

ChatTest.vue:176 DELETE http://localhost:8080/api/chat/conversations/20 500 (Internal Server Error) deleteConversation ChatTest.vue:176 onClick ChatTest.vue:22 ChatTest.vue:185 删除失败 AxiosError {message: Request failed with status code 500, name: Axio…

记录seatunnel排查重复数据的案例分析

文章目录 背景分析检查现象检查B集群是否有异常&#xff0c;导致重复消费的分析同步任务 修复问题发现flink job 一直报异常修复问题 背景 使用seatunnel 同步数据从A 集群kafka 同步到B集群kafka,现象是发现两边数据不一致&#xff0c;每天10w级别会多几十条数据 分析 检查…

VSCode远程图形化GDB

VSCode远程图形化GDB 摘要一、安装VSCode1、使用.exe安装包安装VSCode2、VSCode 插件安装3、VSCode建立远程连接 二、core dump找bug1、开启core文件2、永久生效的方法3、编写测试程序4、运行结果5、查看core段错误位置6、在程序中开启core dump并二者core文件大小 三、gdbserv…

Android 中实现 GIF 图片动画

在 Android 中&#xff0c;ImageView 从 Android 9.0&#xff08;API 级别 28&#xff09; 开始原生支持 GIF 动画&#xff0c;通过 AnimatedImageDrawable 类实现。在之前的版本中&#xff0c;ImageView 并不支持直接播放 GIF 动画&#xff0c;只能显示 GIF 的第一帧。 一、 …

【c语言】指针进阶

目录 1.字符指针 2.指针数组 3.数组指针 3.1 数组指针的定义 3.2 数组指针的使用 4.数组参数&#xff0c;指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5.函数指针 6.函数指针数组 6.1函数指针数组的定义 6.2 函数指针数组…

极狐GitLab 项目 API 的速率限制如何设置?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 项目 API 的速率限制 (BASIC SELF) 引入于 15.10 版本&#xff0c;功能标志为rate_limit_for_unauthenticated_projects_api_…

【xlog日志文件】怎么删除里面包含某些字符串的行(使用excel)

将log日志,复制到单独一行 B列&#xff08;可能一行很长&#xff0c;所以将整合后的放在A列&#xff09; 使用公式可以筛选出 包含某些字符串的行 为true&#xff0c;将这些行直接删除 IF(COUNT(FIND("MediaMuxterThreadRussia",B2,1))>0,"包含",&quo…

STM32提高篇: CAN通讯

STM32提高篇: CAN通讯 一.CAN通讯介绍1.物理层2.协议层二.STM32CAN外设1.CAN控制器的3种工作模式2.CAN控制器的3种测试模式3.功能框图三.CAN的寄存器介绍1.环回静默模式测试2.双击互发测试四.CAN的HAL代码解读一.CAN通讯介绍 CAN(Controller Area Network 控制器局域网,简称…

Java写数据结构:栈

1.概念&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;栈的插…

单页面应用的特点,什么是路由,VueRouter的下载,安装和使用,路由的封装抽离,声明式导航的介绍和使用

文章目录 一.什么是单页面应用?二.什么是路由?生活中的路由和Vue中的路由 三.VueRouter(重点)0.引出1.介绍2.下载与使用(5个基本步骤2个核心步骤)2.1 五个基本步骤2.2 两个核心步骤 四.路由的封装抽离五.声明式导航1.导航链接特点一:能跳转特点二:能高亮 2.两个高亮类名2.1.区…

【C++】模板2.0

最近学习了一些模板的知识&#xff0c;速写本博客作为学习笔记&#xff0c;若有兴趣&#xff0c;欢迎垂阅读&#xff01; 1.非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名…

目标检测中的损失函数(二) | BIoU RIoU α-IoU

BIoU来自发表在2018年CVPR上的文章&#xff1a;《Improving Object Localization With Fitness NMS and Bounded IoU Loss》 论文针对现有目标检测方法只关注“足够好”的定位&#xff0c;而非“最优”的框&#xff0c;提出了一种考虑定位质量的NMS策略和BIoU loss。 这里不赘…