2010-05-31 20 views
10

tengo la siguiente claseañadir dinámicamente anotación a una clase existente

public class Person { 
    ... 
} 

me gustaría crear otra clase que se vería así.

@SomeAnnotation 
public class Person { 
    ... 
} 

A través de un método simple como tal.

public static Class addAnnotation(Class originalType, Class<? extends Annotation> annotation) { 
    // what goes here? 
} 

¿Existe una manera fácil de hacerlo a través de ASM, por ejemplo? ¿Qué dependencias necesitaría? Intenté buscarlo en Google, pero los ejemplos que he encontrado están incompletos o están haciendo otra cosa. Otros marcos como el javassist serían igual de buenos.

Respuesta

6

Puede usar el proyecto javassist para eso.

Con javassist que se vea algo así:

ClassFile cf = ... ; 
ConstPool cp = cf.getConstPool(); 
AnnotationsAttribute attr = new AnnotationsAttribute(cp, AnnotationsAttribute.visibleTag); 

Annotation a = new Annotation("Author", cp); 
a.addMemberValue("name", new StringMemberValue("Chiba", cp)); 
attr.setAnnotation(a); 
cf.addAttribute(attr); 
cf.setVersionToJava5(); 

espero que ayude. Alexey

Cuestiones relacionadas