写在前面
本文看下如何修改返回值。
代码
- 需要增强的类:
package com.dahuyou.javassist.huohuo.cc;
import java.math.BigDecimal;
public class MyApiTestNoAnnotation {
    public double queryUserInfo(String uId){
        return BigDecimal.ONE.doubleValue();
    }
}
- 插桩类
package com.dahuyou.javassist.huohuo.cc;
import com.dahuyou.javassist.huohuo.bb.ApiTest;
import com.dahuyou.javassist.huohuo.bb.RpcGatewayClazz;
import com.dahuyou.javassist.huohuo.bb.RpcGatewayMethod;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.bytecode.*;
public class MyDoItttt {
    public static void main(String[] args) throws Exception {
        ClassPool pool = ClassPool.getDefault();
        CtClass ctClass = pool.get(MyApiTestNoAnnotation.class.getName());
        // 获取方法的自定义注解
        CtMethod queryUserInfo = ctClass.getDeclaredMethod("queryUserInfo");
        MethodInfo methodInfo = queryUserInfo.getMethodInfo();
        // 操作常量池
        ConstPool constPool = methodInfo.getConstPool();
        Bytecode bytecode = new Bytecode(constPool); // 创建指令码
        bytecode.addDconst(0); // double 推送到操作数栈的栈顶
        bytecode.addReturn(CtClass.doubleType); // 返回double类型的结果
        methodInfo.setCodeAttribute(bytecode.toCodeAttribute()); // 设置到方法指令码中
        ctClass.writeFile();
    }
}
运行查看生成的字节码,返回值被修改为了0D:
 
















![AGI 之 【Hugging Face】 的【文本分类】的[数据集][文本转换成词元]的简单整理](https://img-blog.csdnimg.cn/direct/237b587952dd4da681a1eeb61ddea0f8.png)


