java自定义路由引擎通过@controller、@getmapping等注解声明式绑定url路径,利用反射读取注解构建路径到处理器的映射关系。

在 Java 自定义路由引擎中,注解用于声明式地将类或方法与 URL 路径绑定,核心是通过反射读取注解信息,再构建请求路径到处理器的映射关系。
定义路由注解
先创建自定义注解,如 @GetMapping、@PostMapping 和 @Controller,支持类级别和方法级别:
-
@Controller标记一个类为控制器,可选value()指定基础路径(如/api) -
@GetMapping("/users")等注解标注在方法上,指定 HTTP 方法和相对路径 - @Retention(RetentionPolicy.RUNTIME) 和
@Target({ElementType.TYPE, ElementType.METHOD})
扫描并解析注解
启动时扫描指定包下的所有类,过滤出带有 @Controller 的类,再遍历其 public 方法,检查是否含有 @GetMapping 等路由注解:
- 用
ClassPathScanningCandidateComponentProvider或手动加载 class 文件实现扫描 - 对每个匹配类,调用
clazz.getDeclaredMethods()获取方法,用method.isAnnotationPresent(GetMapping.class)判断 - 拼接路径:类注解的
value+ 方法注解的value(注意去重斜杠,如/api+/users→/api/users)
注册路由映射关系
将解析出的路径与对应处理器(如方法引用或封装后的 Handler 对象)存入内存路由表(如 Map<string handler></string>):
- Handler 可封装目标对象、方法、参数解析规则、HTTP 方法类型等信息
- 支持路径变量(如
/users/{id}),需用正则预编译成模式(^/users/([^/]+)$),运行时匹配提取参数 - 相同路径不同方法(GET/POST)可共用 key,但需按 method 区分存储,例如用
Map<string map handler>></string>
请求匹配与执行
收到 HTTP 请求后,根据请求路径和 method 查找匹配的 Handler:
- 遍历路由表,对每个预编译的正则尝试
matcher.matches();匹配成功则提取路径参数(如 id) - 通过反射调用目标方法:设置 accessible,传入解析后的参数(如从 path、query、body 提取并转换类型)
- 返回值可统一包装为响应对象(如
ResponseEntity),交由响应写入器输出
不复杂但容易忽略细节:注解路径的标准化处理、多级继承下注解继承性、重复注解支持、以及路径冲突检测。做好这几点,就能稳定支撑轻量级路由引擎。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











