Spring Boot Starter探秘:全面了解 spring-boot-starter-web

embedded/2025/1/24 21:47:03/

前文《一分钟上手:如何创建你的第一个 SpringBoot Starter》中,我们介绍了如何创建你的第一个 Spring Boot Starter以及SpringBoot框架中常用的Starter,本文就来介绍下Spring Boot框架中最重要的starter之一,spring-boot-starter-web。

spring-boot-starter-web介绍

spring-boot-starter-web 是 Spring Boot 框架里用于构建 Web 应用程序的核心启动器,它极大地简化了 Spring Web 应用的开发流程,通过自动配置和依赖管理,可以快速构建 RESTful API 服务和传统的基于 MVC 的 Web 应用,后者现在基本很少用了,Vue的出现,现在基本都使用后端分离的开发模式。

依赖的包

spring-boot-starter-web 通过一系列依赖包整合了构建 Web 应用所需的各种组件。下面将详细介绍这些核心依赖。

1. spring-boot-starter

这是所有 Spring Boot Starter 的基础包,提供了 Spring Boot 应用的核心功能,包括自动配置、日志管理等。它确保了所有 Starter 之间的兼容性和一致性,是构建任何 Spring Boot 应用的基础。

2. spring-boot-starter-tomcat

spring-boot-starter-web 默认集成了 Tomcat 作为内嵌服务器。这意味着你无需额外配置,应用启动时会自动启动一个 Tomcat 服务器,监听指定端口,提供 Web 服务。当然,如果需要,也可以切换到 Jetty 或 Undertow,只需排除 Tomcat 依赖并添加相应的 Starter 即可。

3. hibernate-validator

数据校验是Web 应用开发中的重要环节。hibernate-validator 支持基于注解的字段校验,如 @NotNull、@Size 等,确保传入的数据符合预期格式和约束条件。现在基本都使用spring-boot-starter-validation包了,具体使用见Spring Boot 注解探秘:@Validated 开启数据验证之旅(上)和Spring Boot 注解探秘:@Validated 开启数据验证之旅(下)

4. jackson-databind

在构建 RESTful API 时,JSON 是最常用的数据交换格式。jackson-databind 提供了高效的 JSON 序列化和反序列化功能,使得 Java 对象与 JSON 数据之间的转换变得极为简便。

老外还是喜欢用jackson,国内的互联网公司大家更喜欢用阿里巴巴提供的fastjson。

5. spring-web

spring-web 是 Spring Framework 中用于构建 Web 应用的核心模块,提供了基础的 Web 功能,如 HTTP 请求处理、REST 支持等。它是 spring-webmvc 的基础,为后者提供底层支持。

6. spring-webmvc

spring-webmvc 是 Spring Framework 的 Web MVC 框架,基于模型-视图-控制器(MVC)设计模式。它负责将 HTTP 请求映射到相应的控制器方法,处理视图解析,以及管理会话和上下文等,是构建复杂 Web 应用的利器。

这6个jar包后续会针对性的来剖析其对应的源码和设计思想

在实际项目中的应用

为了更好地理解 spring-boot-starter-web 的应用,下面通过一个示例来演示其使用。

1. 创建 Spring Boot 项目

使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择 spring-boot-starter-web 作为依赖。

2. 定义实体类

@Data
public class User {private Long id;@NotBlank(message = "用户名不能为空")private String name;@Email(message = "邮箱格式不正确")private String email;
}

3. 创建控制器

@RestController
@RequestMapping("/users")
@Validated
public class UserController {private ConcurrentHashMap<Long, User> userStore = new ConcurrentHashMap<>();private AtomicLong idCounter = new AtomicLong();@PostMappingpublic Response<User> createUser(@Valid @RequestBody User user) {long id = idCounter.incrementAndGet();user.setId(id);userStore.put(id, user);return Response.success(user, HttpStatus.CREATED);}@GetMapping("/{id}")public Response<User> getUser(@PathVariable Long id) {User user = userStore.get(id);if (user != null) {return Response.success(user);}return Response.fail(HttpStatus.FAIL, "用户不存在");}@PutMapping("/{id}")public Response<User> updateUser(@PathVariable Long id, @Valid @RequestBody User user) {if (userStore.containsKey(id)) {user.setId(id);userStore.put(id, user);return Response.success(user);}return Response.fail(HttpStatus.NOT_FOUND, "该用户不存在,无法更新");}@DeleteMapping("/{id}")public Response<?> deleteUser(@PathVariable Long id) {if (userStore.remove(id) != null) {return Response.success();}return Response.fail(HttpStatus.NOT_FOUND, "该用户不存在,无法删除");}
}

4. 运行与测试

启动应用后,可以使用工具如 Postman 、CURL 或者Swagger对 /users 端点进行 CRUD 操作。自动配置的 spring-boot-starter-web 让这一切变得轻而易举,无需手动配置服务器或其他底层细节。

关键点解析

  • 自动配置:spring-boot-starter-web 自动配置了 Spring MVC、Jackson 和 Hibernate Validator 等组件,开发者只需专注于业务逻辑的实现。
  • 内嵌服务器:无需安装 Tomcat,应用启动即拥有一个完整的 Web 服务器环境,简化了部署流程。
  • 依赖管理:通过 Starter 管理所有相关依赖的版本和兼容性,避免了“依赖地狱”的问题。

总结

spring-boot-starter-web 作为 Spring Boot 生态系统中的核心启动器,**为 Web 应用开发提供了一站式的解决方案。**它通过合理的依赖管理和强大的自动配置机制,大大降低了 Spring Web 应用的开发门槛,提高了开发效率。无论是初学者还是经验丰富的开发者,都能从 spring-boot-starter-web 中受益,快速构建出高性能、可扩展的 Web 应用。


http://www.ppmy.cn/embedded/156673.html

相关文章

IP-MS、CoIP-MS及AP-MS助力研究蛋白互作组学

蛋白质相互作用在机体的多种病理生理过程中扮演着至关重要的角色。绝大多数蛋白质分子需要通过与其他蛋白质的相互作用才能实现其生物学功能。因此&#xff0c;深入研究蛋白质相互作用组学对于阐明机体病理和生理过程的发生发展机制具有重要的科学意义。 目前&#xff0c;蛋白…

5G/4G+北斗三号水利遥测终端机RTU-打造水利工程的智能核心

在水资源供需矛盾加剧 气候变化导致的高温干旱 暴雨洪涝等极端天气背景下 智慧水利能够有效 提高水资源利用效率 增强水灾害防御能力 计讯物联自主创新 软硬件一体化解决方案 开发了满足国家行业标准的 水利遥测应用终端设备及平台 具备专业水利资质认证 能够无缝对接省、市、县…

yolov11配置环境,实现OBB带方向目标检测

1. 安装GPU驱动&#xff0c;cuda 验证安装,nvidia-smi命令查看状态 nvcc -V查看cuda版本, 按安装后提示配置路径。 注意&#xff1a; cuda选择版本&#xff0c; 对pytorch支持有关系&#xff0c;目前pytorch最高支持到11.8 &#xff0c;实测A5000装530驱动&#xff0c;安装…

TaskBuilder数据添加页面前后端交互原理解析

在TaskBuilder内打开学员管理项目前端文件里的add.tfp页面&#xff0c;下面以这个文件为例介绍一下数据添加页面如何实现前后端的数据交互。 如果要将页面里输入项的数据提交到后台&#xff0c;需要将这些输入项都放到表单组件中&#xff0c;然后通过表单组件实现数据的统一提交…

Redis超详细入门教程(基础篇)

目录 一、什么是Redis 二、安装Redis 1、Windows系统安装 2、Linux系统安装 三、Redis通用命令 四、Redis基本命令 五、五种数据结构类型 5.1、String类型 5.2、List集合类型 5.3、Set集合类型 5.4、Hash集合类型 5.5、Zset有序集合类型 六、总结 一、什么是Redi…

分布式 IO 模块:开启药品罐装产线高效生产新纪元

在药品生产的精密领域&#xff0c;每一个环节都关乎着客户的健康与安全。药品罐装产线作为药品生产的关键环节&#xff0c;其高效运行与精准控制至关重要。明达技术MR30分布式 IO 模块&#xff0c;正以其卓越的性能&#xff0c;成为实现药品罐装产线高效控制&#xff0c;确保产…

rabbitmq单机与集群模式的部署

单机部署 安装版本说明&#xff1a;erlang 20.3 – 21.x rabbitmq 3.7.13 修改主机名和host文件 hostnamectl set-hostname mq1vim /etc/hosts192.168.3.71 mq1 192.168.3.72 mq2 192.168.3.73 mq3由于RabbitMQ是基于Erlang&#xff08;面向高并发的语言&#xff09;语言开发…

不用安装双系统,如何在mac上玩windows游戏呢?

Mac软件推荐 随着技术的进步&#xff0c;越来越多的游戏公司开始发布 Mac 平台的游戏。虽然目前 Windows 系统仍然占据着主导地位&#xff0c;但 Mac 用户同样可以享受丰富的游戏体验。并且借助某些工具&#xff0c;可以实现 Mac 电脑玩 Windows 游戏的需求。 一、Mac 能玩哪些…