要使用AspectJ声明和检索方法参数的注解,您可以按照以下步骤操作:
org.aspectj
aspectjweaver
1.9.7
MyAspect
的切面类:import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class MyAspect {
@Pointcut("execution(* com.example.MyClass.myMethod(..))")
public void myMethodPointcut() {
}
@Before("myMethodPointcut()")
public void beforeMyMethod(JoinPoint joinPoint) {
Object[] args = joinPoint.getArgs();
for (Object arg : args) {
if (arg instanceof MyAnnotation) {
MyAnnotation annotation = (MyAnnotation) arg;
// 处理注解
}
}
}
@AfterReturning(pointcut = "myMethodPointcut()", returning = "result")
public void afterReturningMyMethod(JoinPoint joinPoint, Object result) {
// 处理方法返回值
}
}
在上述代码中,@Pointcut
注解用于定义切入点,@Before
注解用于在目标方法执行之前执行切面代码,@AfterReturning
注解用于在目标方法返回之后执行切面代码。JoinPoint
参数可以用于检索方法参数和返回值。
myMethod
:import com.example.MyAnnotation;
public class MyClass {
public void myMethod(@MyAnnotation String arg1, @MyAnnotation int arg2) {
// 方法体
}
}
在上述代码中,@MyAnnotation
是自定义的注解。
application.properties
文件中添加以下配置:spring.aop.auto=true
这样,当您调用myMethod
时,切面代码将被触发,并且您可以在切面代码中获取和处理方法参数的注解。