java - javassist ; 不见了
问题描述
谁能告诉我的代码有什么问题?使用 javassist 插入代码时,它显示错误“原因:编译错误:; is missing”;但我仔细检查,没有;完全失踪。javassist 这里有一些限制吗?
ClassPool cp = ClassPool.getDefault();
cp.importPackage("com.mysql.cj");
CtClass cc = cp.get(clzname);
CtMethod ms = cc.getDeclaredMethod(
"execute");
StringBuilder sb = new StringBuilder();
sb.append("String sql = ((PreparedQuery) this.query).getOriginalSql();");
sb.append("QueryBindings bindings = ((PreparedQuery) this.query).getQueryBindings();\n" +
" for (BindValue o : bindings.getBindValues()) {\n" +
" sql = sql.replaceFirst(\"\\\\?\", new String(o.getByteValue()));\n" +
" }");
sb.append(
"System.out.println( sql);");
ms.insertBefore(sb.toString());
byteCode = cc.toBytecode();
解决方案
insertBefore 的 javadoc 说:
https://www.javassist.org/html/javassist/CtBehavior.html#insertBefore(java.lang.String)
参数: src - 表示插入字节码的源代码。它必须是单个语句或块。
因此,将代码包装在花括号中,使其成为一个块。
推荐阅读
- jasmine - 使用 Protractor 读取浏览器的网络选项卡以从某个 API 获取响应
- java - 我如何解决我独特的 java 错误:无效的源版本:1.-
- r - r:将包含多个项目的行按 id 拆分为一列
- javascript - ReactJs:如何使用 if else 一起更改多个 div 的颜色
- javascript - 涉及DOM时如何在多个文件之间传输变量?
- yii2 - BOOLEAN 和 LIKE 与 Yii2 一起搜索?
- python - 在元组列表中查找唯一列表
- mysql - 创建成功后无法连接到aws vm外的mysql数据库
- amazon-web-services - 适用于 Android 和 iOS 13+ 的 React Native 语音通话
- python - 无法 pip 安装到目标(distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base)