大橙子网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

Eclipse下Javassist怎么用-创新互联

这篇文章主要介绍Eclipse下Javassist怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创新互联-专业网站定制、快速模板网站建设、高性价比虎林网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式虎林网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖虎林地区。费用合理售后完善,十载实体公司更值得信赖。

示例如下

项目的结构:

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怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


网站名称:Eclipse下Javassist怎么用-创新互联
文章起源:http://dzwzjz.com/article/pesii.html
在线咨询
服务热线
服务热线:028-86922220
TOP