62,629
社区成员
发帖
与我相关
我的任务
分享
CtMethod ctMethod = ctClass.getDeclaredMethod(methodName);// 得到这方法实例
// 创建新的方法,复制原来的方法,名字为原来的名字
CtMethod newMethod = CtNewMethod.copy(ctMethod, methodName, ctClass, null);
// 定义一个方法名用于描述修改字节码之前的原方法
String oldMethodName = methodName + "$old";
// 将原方法名称修改掉,避免和新添加的方法同名冲突
ctMethod.setName(oldMethodName);
// 构建新的方法体
StringBuilder bodyStr = new StringBuilder();
bodyStr.append("{");
bodyStr.append("long startTime = System.currentTimeMillis();\n");
// 调用原方法代码,类似于method();($$)表示所有的参数
bodyStr.append(oldMethodName).append("($$);\n");
bodyStr.append("long endTime = System.currentTimeMillis();\n");
String outputStr = "System.out.println(\"this method " + methodName
+ " cost:\" +(endTime - startTime) +\"ms.\");\n";
bodyStr.append(outputStr);
bodyStr.append("}");
// 设置新的目标方法的方法体
newMethod.setBody(bodyStr.toString());
// 增加新方法, 原来的方法已经被修改名称为 oldMethodName,调用时会调用到新的目标方法
ctClass.addMethod(newMethod);


[/quote]
你要什么api?Javassist么?
https://www.javassist.org[/quote]不是哦,就是你贴的这段英文
是在哪里的呢,我去看下[/quote]
这可记不起来了,我当时给你上网搜了一下,好像是stackoverflow上的一个帖子[/quote]看了下 javassist 的文档,也提到了已经加载的类不能改变类的 schema,方法列表和成员变量必须和原本的类一致
[/quote]
你要什么api?Javassist么?
https://www.javassist.org[/quote]不是哦,就是你贴的这段英文
是在哪里的呢,我去看下[/quote]
这可记不起来了,我当时给你上网搜了一下,好像是stackoverflow上的一个帖子
[/quote]
你要什么api?Javassist么?
https://www.javassist.org[/quote]不是哦,就是你贴的这段英文
是在哪里的呢,我去看下
[/quote]
你要什么api?Javassist么?
https://www.javassist.org
一楼挽尊