代码之家  ›  专栏  ›  技术社区  ›  ng.

向现有类动态添加批注

  •  12
  • ng.  · 技术社区  · 16 年前

    public class Person {
       ...
    }
    

    我想创建另一个类似这样的类。

    @SomeAnnotation
    public class Person {
       ...
    }
    

    通过这样一个简单的方法。

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

    例如,有没有一种简单的方法可以通过ASM做到这一点?我需要什么样的依赖关系。我试着用谷歌搜索这个,但是我发现的例子要么不完整,要么正在做其他的事情。其他的框架,比如javassist,也同样不错。

    1 回复  |  直到 16 年前
        1
  •  7
  •   Jim Ferrans    16 年前

    你可以用 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();
    

    希望有帮助。 阿列克谢