您可以从 ProceedingJoinPoint 获取签名,如果发生方法调用,只需将其强制转换为 MethodSignature 即可。
@Around("execution(public * *(..)) && @annotation(com.mycompany.MyAnnotation)")
public Object procede(ProceedingJoinPoint call) throws Throwable {
MethodSignature signature = (MethodSignature) call.getSignature();
Method method = signature.getMethod();
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
}
但您应该首先添加一个注释属性。您的示例代码没有,例如
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
}
然后,您可以访问它
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
String value = myAnnotation.value();
编辑
如果我在课堂上有@MyAnnotation(“ABC”)如何获得价值?
A 也是带注释的元素
,因此您可以像从 .例如,可以使用以下命令获得方法的声明类的注释Class
Method
Method method = ...;
Class<?> declaringClass = method.getDeclaringClass();
MyAnnotation myAnnotation = declaringClass.getAnnotation(MyAnnotation.class)
由于您使用的是 spring,您可能还想使用 spring 的 AnnotationUtils.findAnnotation(..)。
它像弹簧一样搜索注释。例如,还要查看超类和接口方法等。
MyAnnotation foundAnnotation = AnnotationUtils.findAnnotation(method, MyAnnotation.class);
编辑
您可能还会对 5.2 中引入的 Spring 的 MergedAnnotations
的功能有所了解。