Java中多态与自定义注解结合的核心是通过策略枚举+反射+统一接口实现行为多态:用枚举定义有限状态并实现接口内聚逻辑,注解声明策略及参数,AOP切面运行时反射获取枚举值并分发执行。

Java 中多态与自定义注解结合,核心在于用枚举定义策略类型(体现多态的“状态分支”),再通过注解声明策略选择,最后在运行时根据枚举值分发对应逻辑——不是靠继承体系实现多态,而是靠策略枚举 + 反射 + 统一接口的组合实现行为多态。
用枚举定义可扩展的策略多态
枚举天然适合表达有限、明确的状态集合,且编译期类型安全。将业务中不同拦截行为抽象为枚举常量,每个常量可绑定描述、code 或具体执行逻辑:
- 定义枚举实现统一接口,把行为内聚到枚举内部(真正多态)
- 例如幂等策略:
IdempotentStrategy.TOKEN自带check()方法,PARAMS自带另一套校验逻辑 - 新增策略只需添加枚举项并实现接口方法,无需修改分发代码
注解声明策略选择,支持参数化配置
自定义注解接收枚举作为属性,同时可附加字符串、数字等辅助参数,形成“策略+上下文”的组合:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 注解字段必须是 public enum 类型,如
IdempotentStrategy value() default TOKEN; - 可搭配其他属性,如
String keyPrefix()用于生成缓存键 - 使用时直接写
@Idempotent(value = BUSINESS_ID, keyPrefix = "order:"),语义清晰、IDE 可提示、编译期校验
运行时反射读取 + 策略分发
切面或拦截器中通过反射获取注解实例,调用其枚举属性,再触发对应行为:
立即学习“Java免费学习笔记(深入)”;
- 用
method.getAnnotation(Idempotent.class)获取注解对象 - 调用
annotation.value()得到具体枚举常量(如BUSINESS_ID) - 若枚举实现了接口(如
IdempotentChecker),直接调用strategy.check(context) - 若未内聚行为,可用
switch (strategy)(JDK 14+)分发到不同校验器实例
配合 Spring AOP 完成增强闭环
注解本身不执行逻辑,需由 AOP 切面或拦截器驱动:
- 切面类标注
@Aspect @Component,通知表达式匹配带注解的方法:@Around("@annotation(idempotent)") - 环绕通知中提取
Idempotent注解,拿到策略枚举 - 构造上下文(如请求参数、token、租户ID),传给策略执行
- 前置校验失败则抛异常阻断执行;成功则
joinPoint.proceed()放行

















