如何从ProceedingJoinPoint获取方法的注释值?
我有以下注释。
回答:
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
回答:
public class SomeAspect{ @Around("execution(public * *(..)) && @annotation(com.mycompany.MyAnnotation)")
public Object procede(ProceedingJoinPoint call) throws Throwable {
//Some logic
}
}
回答:
public class SomeOther{@MyAnnotation("ABC")
public String someMethod(String name){
}
}
在上面的课中, ” 。现在如何在 类的
方法中访问“ ”值? ***
谢谢!
回答:
您可以从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的功能感兴趣。
以上是 如何从ProceedingJoinPoint获取方法的注释值? 的全部内容, 来源链接: utcz.com/qa/411217.html