Динамически добавлять аннотацию к существующему классу
У меня есть следующий класс
public class Person {
...
}
Я хотел бы создать еще один класс, который будет выглядеть следующим образом.
@SomeAnnotation
public class Person {
...
}
С помощью простого метода.
public static Class addAnnotation(Class originalType, Class<? extends Annotation> annotation) {
// what goes here?
}
Есть ли простой способ сделать это через ASM? Какие зависимости мне понадобятся. Я попытался Google, однако примеры, которые я нашел, либо неполны, либо делают что-то еще. Другие рамки, такие как javassist, были бы столь же хорошими.
Ответы
Ответ 1
Вы можете использовать javassist для проекта.
С javassist это будет выглядеть примерно так:
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();
Надеюсь, это поможет.
Алексей