在 Java 中获取注释的参数值

2022-09-01 10:44:22

所以我有一个代码:

@Path("/foo")
public class Hello {

@GET
@Produces("text/html")
public String getHtml(@Context Request request, @Context HttpServletRequest requestss){
  ...
}

我正在使用AspectJ来捕获对方法的所有调用。我想在我的建议中将参数传递给和传递,即 在这种情况下。我如何使用反射来做到这一点?getHtml@Produces@Path"/foo""text/html"


答案 1

获取参数值:@Path

String path = Hello.class.getAnnotation(Path.class).value();

同样,一旦你掌握了Method getHtml

Method m = Hello.class.getMethod("getHtml", ..);
String mime = m.getAnnotation(Produces.class).value;

答案 2

注释基于接口逻辑。您需要调用它的有效成员来检索值。

定义

public @interface Produces {
 String type();
}

阅读示例

for (Method m: SomeClass.class.getMethods() {
   Produces produce = m.getAnnotation(Produces.class);
   if (produce != null)
       System.out.println(produce.type());
}

是的。必须使用反射来访问方法定义。您可以使用 Class#MgetMethods() 来获取方法的定义

对于对象,您调用以获取类定义。obj.getClass()