这篇文章主要介绍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怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款