自定义注解可以标记在方法上或类上,用于在编译期或运行期进行特定的业务功能处理。在 Java 中,自定义注解使用 @interface 关键字来定义,它可以实现如:日志记录、性能监控、权限校验等功能。
在 Spring Boot 中实现一个自定义注解,可以通过 AOP(面向切面编程)或拦截器(Interceptor)来实现。
1.实现自定义注解
下面我们先使用 AOP 的方式来实现一个打印日志的自定义注解,它的实现步骤如下:
添加 Spring AOP 依赖。
创建自定义注解。
编写 AOP 拦截(自定义注解)的逻辑代码。
使用自定义注解。
具体实现如下。
① 添加 Spring AOP 依赖
在 pom.xml 中添加如下依赖:
<dependencies>
<!-- Spring AOP dependency -->
<dependency>
<groupIdorg.springframework.boot</groupId>
<artifactIdspring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
② 创建自定义注解
创建一个新的 Java 注解类,通过 @interface 关键字来定义,并可以添加元注解以及属性。
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomLogAnnotation {
String value() default "";
boolean enable() default true;
}
在上面的例子中,我们定义了一个名为 CustomLogAnnotation 的注解,它有两个属性:value 和 enable,分别设置了默认值。
@Target(ElementType.METHOD) 指定了该注解只能应用于方法级别。
@Retention(RetentionPolicy.RUNTIME) 表示这个注解在运行时是可见的,这样 AOP 代理才能在运行时读取到这个注解。
③ 编写 AOP 拦截(自定义注解)的逻辑代码
使用 Spring AOP 来拦截带有自定义注解的方法,并在其前后执行相应的逻辑。
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework