zoukankan      html  css  js  c++  java
  • CGLib缺少jar出现 java.lang.ClassNotFoundException: org.objectweb.asm.Type

    CGLib实现动态代理区别于JDK动态代理,不需要目标类实现任何接口,是通过生成代理类子类的方式,而且据说速度要快于JDK动态代理。所以我想要试验一下CGlib的动态代理,网上找了些例子,自己动手写了一个Demo,运行时抛出以下异常

    这个异常说明的很清楚,因为使用了CGlib的Enhancer类,这个类用于为非接口类型创建一个Java代理,类里面使用了org.objectweb.asm.Type。ASM是一个字节码解析的工具,导入ASM的jar即可解决该问题,PS:如果使用Maven构建项目就不会出现这个问题

    在这里贴一下我写的Deam,目标类:

    public class Cat {
        
        public void say() {
            System.out.println("我是一只猫");
        }
        
    }

    代理类:

    import java.lang.reflect.Method;
    
    import net.sf.cglib.proxy.Enhancer;
    import net.sf.cglib.proxy.MethodInterceptor;
    import net.sf.cglib.proxy.MethodProxy;
    
    public class CatProxy implements MethodInterceptor{
        
        //目标对象,这里使用Object
        private Object target;
        
        /**
         * 代理对象创建过程
         * @param target
         * @return
         */
        public Object getInstance(Object target) {
            this.target = target;
            Enhancer enhancer = new Enhancer();
            enhancer.setSuperclass(target.getClass());
            //public interface MethodInterceptor extends Callback 所以这里可以给this
            enhancer.setCallback(this);
            Object proxy = enhancer.create();
            return proxy;  //返回代理对象
        }
    
        @Override
        public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
            System.out.println("---------doSomething-------Start");
            Object proxy = arg1.invoke(target, arg2);
            System.out.println("---------doSomething-------End");
            return proxy;
        }
        
        public static void main(String[] args) {
            Cat cat = (Cat) new CatProxy().getInstance(new Cat());
            cat.say();
        }
    
    }

    更多关于CGLib的介绍可以参照以下博文:

    https://www.cnblogs.com/mr-long/p/5889054.html

    http://www.cnblogs.com/icejoywoo/archive/2011/06/05/2072970.html

  • 相关阅读:
    洛谷 P1194 飞扬的小鸟 题解
    洛谷 P1197 星球大战 题解
    洛谷 P1879 玉米田Corn Fields 题解
    洛谷 P2796 Facer的程序 题解
    洛谷 P2398 GCD SUM 题解
    洛谷 P2051 中国象棋 题解
    洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
    洛谷 P1004 方格取数 题解
    洛谷 P2331 最大子矩阵 题解
    洛谷 P1073 最优贸易 题解
  • 原文地址:https://www.cnblogs.com/lz2017/p/10189875.html
Copyright © 2011-2022 走看看