问题
So I've got a code:
@Path("/foo")
public class Hello {
@GET
@Produces("text/html")
public String getHtml(@Context Request request, @Context HttpServletRequest requestss){
...
}
I am using AspectJ to catch all calls to getHtml
method. I would like to get parameters passed to @Produces
and to @Path
in my advice, i.e. "/foo"
and "text/html"
in this case. How can I do it using reflection ?
回答1:
To get value of the @Path
parameter:
String path = Hello.class.getAnnotation(Path.class).value();
Similarly, Once you have hold of Method
getHtml
Method m = Hello.class.getMethod("getHtml", ..);
String mime = m.getAnnotation(Produces.class).value;
回答2:
The annotation is based on interface logic. You need to call the valid member of it to retrieve the value.
Definition
public @interface Produces {
String type();
}
Read example
for (Method m: SomeClass.class.getMethods() {
Produces produce = m.getAnnotation(Produces.class);
if (produce != null)
System.out.println(produce.type());
}
Yes. You must use reflection to access to method definition. You can use Class#MgetMethods() to get the definition of method
For object you call obj.getClass()
to get the class definition.
来源:https://stackoverflow.com/questions/20192552/get-value-of-a-parameter-of-an-annotation-in-java