您可以从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也是A
AnnotatedElement,因此您可以从A
获得相同的方式
Method。例如,可以使用以下方法获取方法声明类的注释:
Method method = ...; Class<?> declaringClass = method.getDeclaringClass(); MyAnnotation myAnnotation = declaringClass.getAnnotation(MyAnnotation.class)
由于您正在使用spring,因此您可能还需要使用spring的
AnnotationUtils.findAnnotation(..)。它像spring一样搜索注释。例如,还要查看超类和接口方法等。
MyAnnotation foundAnnotation = AnnotationUtils.findAnnotation(method, MyAnnotation.class);
编辑
您可能还会
MergedAnnotations对5.2中引入的spring的功能感兴趣。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)