Динамически добавлять аннотацию к существующему классу

У меня есть следующий класс

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

Надеюсь, это поможет. Алексей