如何从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

回到顶部