2013-11-25 13 views
21

Więc mam kod:Get wartość parametru adnotacji w Javie

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

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

Używam AspectJ złapać wszystkie połączenia getHtml metody. Chciałbym uzyskać parametry przekazane do @Produces i @Path w mojej opinii, tj. "/foo" i "text/html" w tym przypadku. Jak mogę to zrobić za pomocą refleksji?

Odpowiedz

27

Aby uzyskać wartość parametru @Path:

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

Podobnie Gdy trzeba trzymać MethodgetHtml

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

Ok, więc pierwszy przykład jest w porządku, ale istnieje '.value()' not' .value'. Drugi nie działa, ponieważ klasa adnotacji nie ma metody "value()". – Darek

+2

drugi działa, ale jak @Vash pokazał: MethodSignature ms = (MethodSignature) pjp.getSignature(); Metoda m = ms.getMethod(); Produkuje pro = m.getAnnotation (Produces.class); – Darek

+0

Jak mogę uzyskać @Annotation (param1 = "One", param2 = "THIS")? –

4

Adnotacja jest oparty na logice interfejsu. Musisz zadzwonić do ważnego członka, aby odzyskać wartość.

Definicja

public @interface Produces { 
String type(); 
} 

Czytaj przykład

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

Tak. Musisz użyć odbicia, aby uzyskać dostęp do definicji metody. Aby uzyskać definicję metody, można użyć Class#MgetMethods(), aby uzyskać definicję metody dla obiektu, który wywołujesz , aby uzyskać definicję klasy.

Powiązane problemy