已导入jar包,asm-3.3.1,cglib-2.2,但不知为什么还是报错。
Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type
at net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:180)
at net.sf.cglib.core.KeyFactory.<clinit>(KeyFactory.java:66)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
at javacore.proxy.cglib.CglibProxyExample.getProxy(CglibProxyExample.java:20)
at javacore.proxy.cglib.CglibProxyExample.testCGLBProxy(CglibProxyExample.java:39)
at javacore.proxy.cglib.CglibProxyExample.main(CglibProxyExample.java:44)
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more
package javacore.proxy.cglib;
import javacore.reflection.ReflectServiceImpl;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
----------
源代码如下
import java.lang.reflect.Method;
public class CglibProxyExample implements MethodInterceptor {
/**
* 生成cglib代理对象
*
* @param cls
* @return Class类的cglib代理对象
*/
public Object getProxy(Class cls) {
//cglib的enhancer增强类对象
Enhancer enhancer = new Enhancer();
//设置增强类型
enhancer.setSuperclass(cls);
//定义代理逻辑对象为当前对象,要求当前对象实现MethodInterceptor方法
enhancer.setCallback(this);
return enhancer.create();
}
@Override
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
System.err.println("调用真实对象前");
Object result = methodProxy.invokeSuper(proxy, args);
System.err.println("调用真实对象后");
return result;
}
public void testCGLBProxy() {
CglibProxyExample cpe = new CglibProxyExample();
ReflectServiceImpl obj = (ReflectServiceImpl) cpe.getProxy(ReflectServiceImpl.class);
obj.sayHello("oaoa");
}
public static void main(String[] args) {
new CglibProxyExample().testCGLBProxy();
}
}
以我的经验,一般情况下,首先检查包是不是真的被引入了,看下target/目录下面的编译文件,如果是maven,请使用命令mvn clean,然后再运行。另外看看该包是不是真的包含缺失的类。