使用CgLib出现Exception in thread "main" java.lang.NoClassDefFoundError: orgobjectwebasmType错误异常

xiaoxiao2021-02-28  54

最近在学习使用CgLib动态代理对象,本来想着跟着动力节点的视频一点点走,没想到第一步就出问题了,因为只是网上找的视频而没有代码,所以只能求助百度,在此做一个记录。代码也比较简单。

一个代理类

package factory; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import service.SomeService1; public class MyCglibFactory implements MethodInterceptor { private SomeService1 target; public MyCglibFactory() { target = new SomeService1(); } public SomeService1 myCglibCreator() { //创建增强器对象 Enhancer enhancer = new Enhancer(); //指定目标类,即父类 enhancer.setSuperclass(SomeService1.class); //设置回调接口对象 enhancer.setCallback(this); return (SomeService1) enhancer.create(); } //回调方法 @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { //调用目标方法 Object result = method.invoke(target, args); if (result != null) { result = ((String)result).toUpperCase(); } return result; } }

一个目标对象

package service; public class SomeService1 { public String doFirst() { System.out.println("执行doFirst()方法"); return "abcde"; } public void doSecond() { System.out.println("执行doSecond()方法"); } }

一个测试类

package test; import factory.MyCglibFactory; import service.SomeService1; public class MyTest2 { public static void main(String[] args) { SomeService1 service = new MyCglibFactory().myCglibCreator(); String result = service.doFirst(); System.out.println(result); service.doSecond(); } }

不过在运行测试类的时候出现了异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type at net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:184) at net.sf.cglib.core.KeyFactory.<clinit>(KeyFactory.java:66) at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69) at factory.MyCglibFactory.myCglibCreator(MyCglibFactory.java:20) at test.MyTest2.main(MyTest2.java:8)Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 5 more

经过查询之后发现除了要导入cglib的jar包之外还要导入asm的jar包,导入asm的jar包之后即可解决该问题。

转载请注明原文地址: https://www.6miu.com/read-2628152.html

最新回复(0)