Java 注解与反射实战:自定义日志与参数校验注解
背景与动机
日常开发里,日志记录和参数校验往往是两块最枯燥的重复劳动。每个重要方法都要写'开始执行'、'参数是 xxx'、'执行结束'的代码;或者在方法入口处判断输入是否为 null、年龄是否在合理范围。
这些工作机械且冗余。注解 + 反射正是解决这类问题的利器——用注解标记需要处理的地方,用反射自动执行逻辑,实现'一次定义,多处复用'。
下面通过两个具体场景,演示如何用注解加反射搞定这些琐事。
案例一:自定义日志注解 @Log
需求分析
我们需要一个注解,标记在方法上后,能自动完成以下操作:
- 记录方法开始执行的时间
- 打印方法参数(可选)
- 记录方法执行耗时
- 打印返回结果(可选)
- 捕获并记录方法抛出的异常
第一步:定义注解结构
先定义注解本身。这里要注意元注解的配置,特别是生命周期必须保留到运行时,否则反射无法获取。
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; // 是否记录异常
}
第二步:业务层使用
有了注解后,业务类只需添加标记,无需修改核心逻辑。
public class OrderService {
String {
(amount <= ) {
();
}
{ Thread.sleep(); } (InterruptedException e) {}
+ System.currentTimeMillis();
}
{
(orderId == || orderId.isEmpty()) {
();
}
{ Thread.sleep(); } (InterruptedException e) {}
}
}




