引言
日常开发中,日志记录和参数校验往往充斥着重复代码。每个方法都要写'开始执行'、'参数是 xxx',或者判断 null、范围是否合法。这些工作机械且冗余。注解 + 反射正是解决这类问题的利器——用注解标记需要处理的地方,用反射自动执行逻辑,实现'一次定义,多处复用'。
本文将带你从零实现两个实用案例:
- 自定义日志注解
@Log:自动记录方法调用细节; - 自定义参数校验注解
@NotNull、@Range:自动校验方法参数合法性。
案例一:自定义日志注解 @Log
需求分析
我们需要一个注解,标记在方法上后,能自动完成:记录方法开始执行的时间、打印方法参数(可选)、记录方法执行耗时、打印返回结果(可选)、捕获并记录方法抛出的异常。
定义注解
首先,定义 @Log 注解。关键在于元注解的配置:@Target(ElementType.METHOD) 限制注解仅用于方法,@Retention(RetentionPolicy.RUNTIME) 必须保留到运行时,否则反射无法获取。
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String description() default "";
boolean recordParams() default true;
boolean recordResult() default true;
boolean recordException() default true;
}
业务类使用
接下来创建一个业务类来使用这个注解。注意看 createOrder 方法,我们标记了描述、参数记录和返回值记录。
public class OrderService {
@Log(description = "创建订单", recordParams = true, recordResult = true)
public String createOrder {
(amount <= ) {
();
}
{ Thread.sleep(); } (InterruptedException e) {}
+ System.currentTimeMillis();
}
{
(orderId == || orderId.isEmpty()) {
();
}
{ Thread.sleep(); } (InterruptedException e) {}
}
}


