前文《一分钟上手:如何创建你的第一个 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 应用。