在 Spring Boot 里写业务时,重复逻辑总是让人头疼。自定义注解配合 AOP 是一种很直接的解决思路——日志打印、参数校验、权限检查这些横切关注点可以抽出来,既减少重复,也让核心代码干净一些。
注解本质上就是个标记(@interface),加上 AOP 或者拦截器,在运行时通过反射解析标记然后织入逻辑。Spring 容器会在启动时自动识别,不用手动注册。
准备工作
引入 AOP 和 Web 依赖。如果已经用了 Spring Boot 的 Web 场景,通常 AOP 额外加一下就行:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
最基础的注解长这样:
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {
String value() default "default";
}
@Target 声明能放哪儿,@Retention 决定生命周期(RUNTIME 才能在运行时反射读),@Documented 是标记它会被 Javadoc 带上。
下面整理几个实际用得上的场景。
日志注解
最常见的就是给方法自动打印入参、出参和耗时。比如调试的时候,不想每个方法都手写 log.info。


