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

  • 相关阅读:
    实用 .htaccess 用法大全
    研究生生活半年的一些总结
    The JRE could not be found. Edit the server and change the JRE location.
    FastCGI Error Number: 5 (0x80070005).
    如何修改discuz论坛的图像地址
    用JavaScript获取页面上被选中的文字的技巧
    JS一些实用的方法
    PHP下载网页
    PHP is much better than you think
    Javascript_06_表单验证(离开单项,输入框后提示信息)
  • 原文地址:https://www.cnblogs.com/lz2017/p/10189875.html
Copyright © 2011-2022 走看看