返回顶部

收藏

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

标签:java,javassist

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. coderbee 发表 2017-07-19 14:41:16 Javassist 字节码操作库
  2. obaby 发表 2018-01-04 08:57:51 Javassist
  3. admin 发表 2013-11-13 04:38:59 javassist这货到底干嘛的?
  4. bluedavy 发表 2013-03-05 13:16:56 一次非常诡异的CMS GC频繁问题的排查
  5. kongxx 发表 2016-06-16 01:25:28 Zookeeper实战之分布式锁
  6. 唐尤华 发表 2013-09-12 00:06:46 Java8开发者预览版准备测试
  7. 博主 发表 2016-06-04 00:00:00 Java Io Sync Flush Force
  8. zhiwei 发表 2013-09-19 04:57:37 PHP的gzencode和gzdeflate以及gzcompress
  9. welpher 发表 2012-04-01 02:25:54 在notepad++中对javascript文件进行压缩
  10. master 发表 2013-10-11 09:51:19 在Eclipse(使用ADT)时出现“R cannot be resolved to a varia
  11. nkxiaochuan 发表 2016-07-06 15:43:00 《JAVA8开发指南》使用流式操作
  12. gouki 发表 2013-10-24 10:25:00 java惊魂

发表评论