这篇文章主要介绍Eclipse下Javassist怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
示例如下
项目的结构:
Editable.java: package com.thrblock.javassist; public class Editable { public void showInfo(){ System.out.println("InfoDefault!"); } }
Main.java: package com.thrblock.javassist; import java.io.IOException; import javassist.CannotCompileException; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.CtNewMethod; import javassist.NotFoundException; public class Main { public static void main(String[] args) { ClassPool pool = ClassPool.getDefault(); try{ pool.insertClassPath(".\\bin"); //设置根路径。(这里设置的根路径显然没被writeFile使用) CtClass cc = pool.makeClass("com.thrblock.javassist.EditableChanged"); //模拟Hibernate代理模式,我们创建一个新类 cc.setSuperclass(pool.get("com.thrblock.javassist.Editable")); //设置其父类 CtMethodcm = CtNewMethod.make("public void showInfo(){super.showInfo();System.out.println(\"CustomInsertHAHA!\");}",cc); //追加一个方法,注意它覆盖了父类中的方法。 cc.addMethod(cm); cc.writeFile(".\\bin"); //这里比较重要,空参的结果就是没有保存到eclipse字节码根路径里。 } catch (NotFoundException | CannotCompileException | IOException e) { e.printStackTrace(); } try{ Class<?> cl = Class.forName("com.thrblock.javassist.EditableChanged"); //加载我们的新类 Editableed = (Editable) cl.newInstance(); //由于其继承与Editable类,这里和Hibernate里的load道理一样。 ed.showInfo(); //调用方法。 } catch (ClassNotFoundException | InstantiationException |IllegalAccessException e) { e.printStackTrace(); } } }
打印结果:
InfoDefault!
CustomInsertHAHA!
其他注意事项:
由于我们是生成了一个类,如果这个类名和原类名一样,则会覆盖class文件,但是如果修改之前该class已经被JVM装入,则修改的部分不会生效,必须重启JVM。
以上是“Eclipse下Javassist怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。