1、aop处理类上面的注解
@Around(value = "@within(myTestAnnotation)")
处理类上面的注解、执行类下面的每个方法时都会触发
2、aop处理方法上面的注解
@Around(value = "@annotation(myTestAnnotation)")
在执行特定方法时会触发
3、注意
value = "@annotation (参数名)"
是必须的,@within(参数名)、@annotation(参数名)
中的参数名必须与所注释的方法内注解入参的参数名一致
比如:
@Around(value = "@within(myTestAnnotation)")
public Object processMethod(ProceedingJoinPoint point, MyTestAnnotation myTestAnnotation) throws Throwable {
return process(point,myTestAnnotation);
}
@Around(value = "@annotation(myTestAnnotation)")
public Object around(ProceedingJoinPoint point, MyTestAnnotation myTestAnnotation) throws Throwable {
return process(point,myTestAnnotation);
}
argNames = ""
配置不是必须的,但其配置的值一定要与 所注释方法内所有对象名一致! 否则无法匹配参数,启动报错!
比如:
@Around(value = "@within(myTestAnnotation)",argNames = "point,myTestAnnotation")
public Object processMethod(ProceedingJoinPoint point, MyTestAnnotation myTestAnnotation) throws Throwable {
return process(point,myTestAnnotation);
}
@Around(value = "@annotation(myTestAnnotation)",argNames = "point,myTestAnnotation")
public Object around(ProceedingJoinPoint point, MyTestAnnotation myTestAnnotation) throws Throwable {
return process(point,myTestAnnotation);
}
3、代码
@Aspect
@Component
@Slf4j
public class MyTestAspect {
// @within处理类上面的注解[执行类下面的每个方法都会触发]
@Around(value = "@within(myTestAnnotation)")
public Object processMethod(ProceedingJoinPoint point, MyTestAnnotation myTestAnnotation) throws Throwable {
return process(point,myTestAnnotation);
}
// @annotation处理方法上面的注解
@Around(value = "@annotation(myTestAnnotation)")
public Object around(ProceedingJoinPoint point, MyTestAnnotation myTestAnnotation) throws Throwable {
return process(point,myTestAnnotation);
}
public static Object process(ProceedingJoinPoint pjp, MyTestAnnotation myTestAnnotation) throws Throwable {
// 获取当前方法参数[]
Object[] args = pjp.getArgs();
// 获取当前方法
Signature method = pjp.getSignature();
// 执行当前方法并返回结果
Object returnValue = pjp.proceed(args);
log.info("methodName = {} and args = {} and returnValue ={} proceed finished !", method.getName(), args, returnValue);
return returnValue;
}
}