《Spring Boot 3实战案例合集》现已囊括超过50篇精选实战文章,并且此合集承诺将永久持续更新,为您带来最前沿的技术资讯与实践经验。欢迎积极订阅,享受不断升级的知识盛宴!订阅用户将特别获赠合集内所有文章的最终版MD文档(详尽学习笔记),以及完整的项目源码,助您在学习道路上畅通无阻。
环境:SpringBoot3.2.5
1. 简介
Spring MVC的核心组件主要包括DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)、HandlerAdapter(处理器适配器)、ViewResolver(视图解析器)等。这些组件共同协作,实现了请求的分发、处理及响应的生成。
DispatcherServlet 作为前端控制器请求的入口,所以这里我们不变。我们的焦点将集中在Spring MVC的另外两个核心组件上——HandlerMapping与HandlerAdapter。通过亲自实践自定义这两个组件,我们将深入探索Spring MVC底层的工作机制。
先说明这两个核心组件的作用:
HandlerMapping:主要作用是将客户端的请求映射到具体的处理器(Handler)上。它根据请求的URL或其他标识符,确定应该由哪个处理器来处理该请求,并将处理器的信息返回给DispatcherServlet。
HandlerAdapter:则是一个适配器模式的实现,它负责将处理器和请求的处理过程结合起来。通过适配不同类型的处理器,HandlerAdapter使得Spring MVC能够支持多种处理器类型,包括普通的控制器、重定向控制器等。它充当了处理器和HandlerMapping之间的桥梁,确保请求能够正确地被处理器处理并返回结果。
本篇文章,我们将实现如下功能:
自定义注解
自定义@PackController标记处理器请求的接口,@PackRequest标记处理请求的具体方法。
自定义HandlerMapping
在该HandlerMapping中我们主要是解析处理所有使用@PackController注解的类及其中使用@PackRequest的方法。
自定义HandlerAdapter
该适配器用来调用由HandlerMapping返回的目标处理程序。
参数解析
实现简单的参数功能,以支持自动获取请求参数及类型转换。
接下来,我们将详细逐步的实现以上功能。
2. 实战案例
2.1 自定义注解
public PackController {
}
注意:这里我们使用了@Component注解,这样Spring容器才能识别到我们当前的这个类为bean对象。
(RUNTIME)
({ METHOD })
public PackRequest {
/**请求URI*/
String value() default "" ;
}
为了简单起见,我们不考虑其它请求属性,如:Method,Header等。仅仅就是通过请求的uri进行匹配。
public class UserController {
private final UserService userService ;
public UserController(UserService userService) {
this.userService = userService ;
}
public User query() {
System.err.println(this.userService.query()) ;
return new User(1L, "张三", 22) ;
}
}
最终,我们的接口定义如上,对于返回值类型,我们暂时都以JSON格式进行返回,不考虑其它情况。