2010-04-07 9 views
7

Empiezo a utilizar las anotaciones Java en gran medida. Un ejemplo es tomar el método con anotaciones y convertirlas en un comando de línea de comandos basado en "telnet". Lo hago analizando anotaciones y enganchando en el analizador de opciones jopt.Anotaciones de Java: ¿hay alguna biblioteca auxiliar para leer/procesar anotaciones?

Sin embargo, hago un montón de estos manualmente. Por ejemplo, proceso de anotación de parámetros de método ...

Method method = ... //; 
Class[] parameters = method.getParamterTypes(); 
Annotation[][] annotations = method.getparamterAnnotations(); 

for(int i = 0; i < parameters.length; i++) 
{ 
    // iterate through the annotation , see if each param has specific annotation ,etc. 
} 

Es muy redundante y tedioso.

¿Hay algún proyecto de código abierto que ayude a procesar las anotaciones?

Respuesta

6

Usamos esto para buscar una anotación específica:

for (Field field : clazz.getDeclaredFields()) { 
    if (field.isAnnotationPresent(MyAnnotation.class)) { 
     field.setAccessible(true); 
     String fieldName = field.getName(); 
     Object fieldValue = field.get(myObj); 
     field.setAccessible(false); 
    } 
} 
0

No exactamente seguro de qué ayuda necesita para anotaciones, pero me gustaría sugerir que usted echa un vistazo a mi proyecto Annox. Aquí está API.

Con Annox puede, por ejemplo, leer las anotaciones en

  • XAnnotation
  • XAnnotationField
  • XPackage
  • XClass
  • XConstructor
  • XField
  • XMethod
  • XParametro

estructuras que se ajusten mejor a sus necesidades. Puede leer anotaciones arbitrarias desde XML, ejecutar visitas en ellas, etc.

1

Cualquier proyecto contendría exactamente el mismo código repetitivo. ¿Por qué no haces tu propia utilidad?

estoy seguro de que podría utilizar ASM:

+0

podría escribir mi propio ayudante de utilidad. Pero no quería volver a inventar la rueda. En cuanto a ASM, utilizo CGLIB (que usa ASM) para crear clases de proxy dinámicas. – mjlee

+0

¡Podría escribir su propia utilidad como un proyecto de código abierto, para que podamos ayudarlo y reutilizarlo! :-) –

+0

El primer enlace está roto – Artem

Cuestiones relacionadas