javassist给方法添加注解详解编程语言

package cn.outofmemory.hello.javassist; 
 
import javassist.*; 
import javassist.bytecode.AnnotationsAttribute; 
import javassist.bytecode.ClassFile; 
import javassist.bytecode.ConstPool; 
import javassist.bytecode.annotation.Annotation; 
import javassist.bytecode.annotation.IntegerMemberValue; 
 
import java.io.IOException; 
 
/** 
 * add annotation with javassist 
 * Created by outofmemory.cn on 2015/12/14. 
 */ 
public class App { 
    public static void main(String[] args) throws CannotCompileException, IOException { 
        ClassPool pool = ClassPool.getDefault(); 
 
        // create the class 
        CtClass cc = pool.makeClass("foo"); 
        ClassFile ccFile = cc.getClassFile(); 
        ConstPool constpool = ccFile.getConstPool(); 
 
        // create the annotation 
        AnnotationsAttribute attr = new AnnotationsAttribute(constpool, AnnotationsAttribute.visibleTag); 
        Annotation annot = new Annotation("MyAnnotation", constpool); 
        annot.addMemberValue("value", new IntegerMemberValue(ccFile.getConstPool(), 0)); 
        attr.addAnnotation(annot); 
 
        // create the method 
        CtMethod mthd = CtNewMethod.make("public Integer getInteger() { return null; }", cc); 
        cc.addMethod(mthd); 
        mthd.getMethodInfo().addAttribute(attr); 
 
        cc.writeFile("./"); 
        // generate the class 
        Class<?> clazz = cc.toClass(); 
 
        // length is zero 
        java.lang.annotation.Annotation[] annots = clazz.getAnnotations(); 
    } 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10474.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论