Javassist学习


用 Javassist 进行类转换

http://www.ibm.com/developerworks/cn/java/j-dyn0916/

Javassist学习笔记

http://zhxing.iteye.com/blog/1703305/

Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

http://blog.csdn.net/luanlouis/article/details/24589193

深入理解Java Class文件格式(一)

http://blog.csdn.net/zhangjg_blog/article/details/21486985

记录一个遇到的问题

 ClassPool classPool = new ClassPool();

   CtClass ctClass = classPool.makeClass("com.wedcel.Person");

    try {
        CtMethod method = CtNewMethod.make("public void code(){}", ctClass);
        //插入方法代码
        method.insertBefore("System.out.println(\"I'm a Programmer,Just Coding.....\");");
        ctClass.addMethod(method);
        //保存生成的字节码
        ctClass.writeFile("d://temp");
    } catch (Exception e) {
        e.printStackTrace();
    }

}

这样会报异常

javassist.CannotCompileException: [source error] no such class: System.out
at javassist.CtBehavior.insertBefore(CtBehavior.java:774)
at javassist.CtBehavior.insertBefore(CtBehavior.java:734)

上面加个true

ClassPool classPool = new ClassPool(true);

这样就可以自动导入