org.objectweb.asm.ClassWriter.<init>(I)V和org.objectweb.asm.ClassWriter.<init>(Z)V

本文详细描述了解决使用Spring3、Hibernate3.6、Struts2.1.8等技术栈结合时遇到的NoSuchMethodError问题的方法。通过更换CGlib.jar的版本(从2.1到2.2或反之),成功解决了初始化方法失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前一段给jvm更新了一个补丁:Dynamic Code Evolution for Java dcevm。

详情见http://blog.csdn.net/zxkevin1989/article/details/7098464

就是为了能更好的无限制的调试程序。

刚开始出现下面的错误

Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V。

后来换了个编译环境又出现这个错误

Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V。

网上搜索了下

均是:"Spring3 HIbernate3.6 Struts2.1.8结合时配置 AOP事物, 出现错误"

解决办法:

出现<init>(Z)V将

将cglib.jar 由2.1版本改为 2.2

出现<init>(I)V将

将cglib.jar 由2.2版本改为 2.1.

使用 ASM 库可以轻松地读取编辑 Java 类文件。下面是一个简单的示例,演示如何使用 ASM 读取类文件并输出类中的所有方法名称: ```java import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import java.io.IOException; public class ReadClass { public static void main(String[] args) throws IOException { String className = "com/example/MyClass"; ClassReader classReader = new ClassReader(className); classReader.accept(new ClassPrinter(), 0); } static class ClassPrinter extends ClassVisitor { public ClassPrinter() { super(Opcodes.ASM5); } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { System.out.println("Method: " + name); return null; } } } ``` 在此示例中,我们使用 `ClassReader` 类读取名为 `com.example.MyClass` 的类文件,然后将其传递给 `ClassPrinter` 类的实例进行处理。`ClassPrinter` 类扩展自 `ClassVisitor` 类,可以在处理类文件时拦截各种事件。在此示例中,我们只重写了 `visitMethod` 方法,并在其中输出方法名称。当 `ClassReader` 读取到类文件中的每个方法时,会调用 `visitMethod` 方法并将方法信息传递给它。 你也可以使用 ASM 编辑器来修改类文件。例如,可以使用 `ClassWriter` 创建新的类文件,并使用 `MethodVisitor` 添加新的方法。具体实现可以参考 ASM 官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值