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

前文《一分钟上手:如何创建你的第一个 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. 定义实体类

java 复制代码
@Data
public class User {
    private Long id;

    @NotBlank(message = "用户名不能为空")
    private String name;

    @Email(message = "邮箱格式不正确")
    private String email;
}

3. 创建控制器

java 复制代码
@RestController
@RequestMapping("/users")
@Validated
public class UserController {

    private ConcurrentHashMap<Long, User> userStore = new ConcurrentHashMap<>();
    private AtomicLong idCounter = new AtomicLong();

    @PostMapping
    public 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 应用。

相关推荐
GetcharZp2 分钟前
告别 Nginx 手动配置!这款 Go 语言开发的云原生网关,才是容器化时代的真香神器!
后端
RuoyiOffice11 分钟前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
spring boot·后端·vue·anti-design-vue·ruoyioffice·假期·人力
xmjd msup38 分钟前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
Vane141 分钟前
从零开发一个AI插件,经历了什么?
人工智能·后端
952361 小时前
SpringBoot统一功能处理
java·spring boot·后端
rleS IONS1 小时前
SpringBoot中自定义Starter
java·spring boot·后端
DevilSeagull2 小时前
MySQL(2) 客户端工具和建库
开发语言·数据库·后端·mysql·服务
TeDi TIVE3 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
雨辰AI3 小时前
SpringBoot3 + 人大金仓 V9 微服务监控实战|Prometheus+Grafana+SkyWalking 全链路监控
数据库·后端·微服务·grafana·prometheus·skywalking
二哈赛车手3 小时前
新人笔记---ES和kibana启动问题以及一些常用的linux的错误排查方法,以及ES,数据库泄密解决方案[超详细]
java·linux·数据库·spring boot·笔记·elasticsearch