J'ai donc un code:
@Path("/foo")
public class Hello {
@GET
@Produces("text/html")
public String getHtml(@Context Request request, @Context HttpServletRequest requestss){
...
}
J'utilise AspectJ pour intercepter tous les appels à la méthode getHtml
. Je souhaite que les paramètres soient passés à @Produces
et à @Path
dans mes conseils, c'est-à-dire "/foo"
et "text/html"
dans ce cas. Comment puis-je le faire en utilisant la réflexion?
Pour obtenir la valeur de @Path
paramètre:
String path = Hello.class.getAnnotation(Path.class).value();
De même, une fois que vous avez en main Method
getHtml
Method m = Hello.class.getMethod("getHtml", ..);
String mime = m.getAnnotation(Produces.class).value;
L'annotation est basée sur la logique d'interface. Vous devez en appeler le membre valide pour récupérer la valeur.
Définition
public @interface Produces {
String type();
}
Lire l'exemple
for (Method m: SomeClass.class.getMethods() {
Produces produce = m.getAnnotation(Produces.class);
if (produce != null)
System.out.println(produce.type());
}
Oui. Vous devez utiliser la réflexion pour accéder à la définition de méthode. Vous pouvez utiliser Class # MgetMethods () pour obtenir la définition de la méthode
Pour un objet, vous appelez obj.getClass()
pour obtenir la définition de classe.