用 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);
这样就可以自动导入