Динамически добавлять аннотации к существующему классу - PullRequest
12 голосов
/ 31 мая 2010

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

public class Person {
   ...
}

Я бы хотел создать еще один класс, который бы выглядел следующим образом.

@SomeAnnotation
public class Person {
   ...
}

С помощью простого метода, подобного этому.

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

Есть ли простой способ сделать это, например, через ASM? Какие зависимости мне понадобятся. Я попытался Google это, однако примеры, которые я нашел, или неполны, или делают что-то еще. Другие фреймворки, такие как javassist, были бы такими же хорошими.

1 Ответ

7 голосов
/ 31 мая 2010

Для этого вы можете использовать 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();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...