我现在尝试在我的 Web 应用程序中编写一些字节码操作,当我尝试将代码注入到我的方法中时,它总是会抛出错误
javassist.CannotCompileException: [源错误] ) 丢失
我不知道为什么以及这是什么......我用谷歌搜索了一下,有些人说这是 1.0 javassist 版本的错误,但我认为这真的不现实。
private void changeMethod(CtMethod method) throws NotFoundException,
CannotCompileException {
if (method.hasAnnotation(Loggable.class)) {
method.getName();
method.insertBefore("long startTime = 0;" +
"long startTime = System.currentTimeMillis();" +
" Thread thread1 = new Thread(new Runnable(){\n" +
" @Override\n" +
" public void run() {\n" +
" threadLogger.info(\"Testlog\");\n" +
"\n" +
" try {\n" +
" threadLogger.logCall(Webservice.this.getClass().getMethod(startThread0), \"Thread\");\n" +
" \n" +
" } catch (Exception e) {\n" +
" e.printStackTrace();\n" +
" }\n" +
"\n" +
" }\n" +
" });\n" +
" thread1.start();");
}
}
enter code here
正如您可以在 Javassist 文档中读到的那样,第 4.7 节 限制 http://jboss-javassist.github.io/javassist/tutorial/tutorial2.html#limit(粗体是我的):
不支持内部类或匿名类。请注意,这
仅是编译器的限制。无法编译源代码
包括匿名类声明。 Javassist 可以阅读和
修改内部/匿名类的类文件。
您正在尝试注入匿名 Runnable 类,因此它不起作用。解决此问题的最佳方法是将 Runnable 类代码提取到注入和运行时类路径中可用的新类,并在注入代码中使用该类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)