Javassit使用总结

参考:https://blog.csdn.net/zhaohongfei_358/article/details/101267843

自动装箱和拆箱

使用javassit插入代码时,需要编写装箱和拆箱的操作,比如int->Integer

需要这么写:Integer i = new Integer(3);

热部署实现的关键

同一个类字节文件,classLoader类加载器只能加载一次,多次会报错。这样的话 ,我们就不能通过类加载器重新加载改动后的类,只能通过javaAgent的方式去动态加载

使用javaAgent,再结合javassit来修改类字节,从而实现类的动态加载

 CtClass clazz = classPool.get(classname);
 CtMethod ctMethod = clazz.getDeclaredMethod("mock");
 ctMethod.setBody("{ return 123;}");

 //重新创建新的ClassDefinition,注意第一个参数,获取的当前类加载器加载的类,第二个参数是修改过后的类字节码
 ClassDefinition classDefinition = new ClassDefinition(Class.forName(clazz.getName()), 
 clazz.toBytecode());
 // 使用Instrumentation 重新加载类描述
 inst.redefineClasses(classDefinition);

maven打包时,使用父类根路径

project.parent.basedir
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值