使用Cglib动态dialing开发运行时抛异常org.objectweb.asm.ClassW

开始时使用的jar包:

asm-2.2.3.jar

cglib-2.2.jar

代码如下:

package proxy.cglib;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;/** * Cglib动态代理:可以不用像JDK的对象使用动态代理必须要实现一个或多个接口 * @author frank * 2015-4-28上午11:47:58 */public class CglibDemo {public static void main(String[] args) {Test tset=(Test) new MyCglib().getInstance(new Test());tset.start();}}class Test{public void start(){System.out.println("start…");}public void stop(){System.out.println("stop…");}} class MyCglib implements MethodInterceptor{ public Object getInstance(Object o){ Enhancer e=new Enhancer(); e.setSuperclass(o.getClass()); e.setCallback(this); return e.create(); }@Overridepublic Object intercept(Object object, Method method, Object[] objects,MethodProxy proxy) throws Throwable {System.out.println("->");proxy.invokeSuper(object, objects);System.out.println("-<");return null;}}一运行:

Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)Vat net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24)at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144)at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116)at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)at proxy.cglib.MyCglib.getInstance(CglibDemo.java:36)at proxy.cglib.CglibDemo.main(CglibDemo.java:21)经过资料查找发现是jar包问题:

把cglib-2.2.jar换成cglib-nodep-2.1_3.jar完美解决问题。

运行结果:

->start…-<

,福报够的人,从来就没听到过是非。

使用Cglib动态dialing开发运行时抛异常org.objectweb.asm.ClassW

相关文章:

你感兴趣的文章:

标签云: