2010-05-31 26 views
10

ich die folgende KlasseDynamisch Anmerkung zu einer vorhandenen Klasse hinzufügen

public class Person { 
    ... 
} 

Ich möchte eine andere Klasse erstellen, die wie folgt aussehen würde.

@SomeAnnotation 
public class Person { 
    ... 
} 

Über eine einfache Methode wie so.

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

Gibt es einen einfachen Weg, dies zum Beispiel über ASM zu tun? Welche Abhängigkeiten würde ich brauchen. Ich habe versucht, dies zu googlen, aber die Beispiele, die ich gefunden habe, sind entweder unvollständig oder machen etwas anderes. Andere Frameworks wie Javassist wären genauso gut.

Antwort

6

Sie können javassist Projekt dafür verwenden.

Mit Javassist wird es so ähnlich aussehen werden:

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(); 

Hoffe, es hilft. Alexey

Verwandte Themen