2010-05-31 41 views
10

Tôi có lớp sauđộng thêm chú thích cho một lớp học hiện có

public class Person { 
    ... 
} 

Tôi muốn tạo ra một lớp mà có thể trông như thế này.

@SomeAnnotation 
public class Person { 
    ... 
} 

Thông qua một phương pháp đơn giản như vậy.

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

Có cách nào dễ dàng để thực hiện điều này thông qua ASM chẳng hạn? Tôi cần những phụ thuộc nào. Tôi đã thử Google này tuy nhiên các ví dụ tôi đã tìm thấy hoặc là không đầy đủ hoặc đang làm cái gì khác. Các khuôn khổ khác như javassist sẽ là tốt.

Trả lời

6

Bạn có thể sử dụng dự án javassist cho điều đó.

Với Javassist nó sẽ được giống như thế:

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

Hy vọng nó giúp. Alexey

Các vấn đề liên quan