Refletindo
Você pode facilmente refletir todas as anotações de uma classe:
Class<T> clazz;
List<Annotation> annotations = new Mirror().on(clazz).reflectAll()
.annotations().atClass();
Da mesma forma que você também pode facilmente refletir todas as anotações de
um field ou de um método:
Class<T> clazz;
List<Annotation> methodAnnotations = new Mirror().on(clazz).reflectAll()
.annotations().atMethod("nomeMetodo").withoutArgs();
List<Annotation> fieldAnnotations = new Mirror().on(clazz).reflectAll()
.annotations().atField("nomeField");
Também é possível recuperar um valor de uma propriedade da anotação,
como no código seguinte:
FooAnnotation annotation = new Mirror().on(clazz).reflect()
.annotation(FooAnnotation.class).atClass();
String valor = annotation.aProperty();
E também funciona para anotações em fields e métodos:
FooAnnotation annotation = new Mirror().on(clazz).reflect()
.annotation(FooAnnotation.class).atField("nomeField");
String valor = annotation.aProperty();
FooAnnotation annotation = new Mirror().on(clazz).reflect()
.annotation(FooAnnotation.class)
.atMethod("nomeMetodo").withoutArgs();
String valor = annotation.aProperty();