gpt4 book ai didi

java - 如何从 ProceedingJoinPoint 获取方法的注释值?

转载 作者:IT老高 更新时间:2023-10-28 13:03:20 30 4
gpt4 key购买 nike

我有以下注释。

MyAnnotation.java

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

}

SomeAspect.java

public class SomeAspect{

@Around("execution(public * *(..)) && @annotation(com.mycompany.MyAnnotation)")
public Object procede(ProceedingJoinPoint call) throws Throwable {

//Some logic

}

}

SomeOther.java

public class SomeOther{

@MyAnnotation("ABC")
public String someMethod(String name){


}


}

在上面的类(class)中,我在 @MyAnnotation 中传递了“ABC”。现在如何在 SomeAspect.java 类的 procede 方法中访问“ABC”值?

谢谢!

最佳答案

您可以获得Signature来自 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);
}

但是你应该首先添加一个注解属性。您的示例代码没有,例如<​​/p>

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

String value();
}

然后就可以访问了

MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
String value = myAnnotation.value();

编辑

How to get value if I have @MyAnnotation("ABC") at class level ?

Class 也是 AnnotatedElement , 所以你可以像从 Method 一样得到它。例如。方法的声明类的注解可以使用

 Method method = ...;
Class<?> declaringClass = method.getDeclaringClass();
MyAnnotation myAnnotation = declaringClass.getAnnotation(MyAnnotation.class)

由于您使用的是 spring,您可能还想使用 spring 的 AnnotationUtils.findAnnotation(..) .它像 spring 一样搜索注解。例如。还要查看父类(super class)和接口(interface)方法等。

 MyAnnotation foundAnnotation = AnnotationUtils.findAnnotation(method, MyAnnotation.class);

编辑

您可能还对 spring 的 MergedAnnotations 的功能感兴趣。在 5.2 中引入。

关于java - 如何从 ProceedingJoinPoint 获取方法的注释值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21275819/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com