这篇文章主要介绍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怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。