java - introspección - para que sirven las anotaciones
Obtener el valor de un parámetro de una anotación en Java (2)
Así que tengo un código:
@Path("/foo")
public class Hello {
@GET
@Produces("text/html")
public String getHtml(@Context Request request, @Context HttpServletRequest requestss){
...
}
Estoy usando AspectJ para capturar todas las llamadas al método getHtml
. Me gustaría que los parámetros pasen a @Produces
y a @Path
en mi consejo, es decir, "/foo"
y "text/html"
en este caso. ¿Cómo puedo hacerlo utilizando la reflexión?
La anotación se basa en la lógica de la interfaz. Debe llamar al miembro válido de la misma para recuperar el valor.
Definición
public @interface Produces {
String type();
}
Lee el ejemplo
for (Method m: SomeClass.class.getMethods() {
Produces produce = m.getAnnotation(Produces.class);
if (produce != null)
System.out.println(produce.type());
}
Sí. Debe utilizar la reflexión para acceder a la definición del método. Puede usar Class#MgetMethods() para obtener la definición de método
Para el objeto al que llama obj.getClass()
para obtener la definición de clase.
Para obtener el valor del parámetro @Path
:
String path = Hello.class.getAnnotation(Path.class).value();
Del mismo modo, una vez que haya mantenido el Method
getHtml
Method m = Hello.class.getMethod("getHtml", ..);
String mime = m.getAnnotation(Produces.class).value;