zoukankan      html  css  js  c++  java
  • cglib 代理

    cglib 代理

    什么是cglib?

      一段介绍是这样的:

          CGLIB(Code Generation Library)是一个开源项目!

          是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。

          CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。

          Spring AOP和Hibernate同时使用JDK的动态代理和CGLIB包。

    cglib 代理特点:

    CGLIB 是针对类来实现代理,它的原理是对指定的目标类生成一个子类,并覆盖其中方法。

    因为采用的是继承,所以不能对 finall 类进行继承。

    需要用到两个jar: cglib 和 asm

    实例:

    1、一个Hello 类,是目标对象

    /** 没有接口的类
     * Created by hp on 14-7-27.
     */
    public class Hello {
    
        public void sayHello() {
            System.out.println("Hello ,world");
        }
    }

    2、代理类CglibProxy,

    /**  Cglib 动态代理
     * Created by hp on 14-7-27.
     */
    public class CglibProxy implements MethodInterceptor {
    
        private Object object;
    
        /* 创建代理对象
         * @param object
         * @return
         */
        public Object getProxyInstance(Object object) {
            this.object = object;
            Enhancer enhancer = new Enhancer();
            enhancer.setSuperclass(object.getClass());
            enhancer.setCallback(this);
            return enhancer.create();
        }
    
    
        @Override
        public Object intercept(Object obj, Method method,
                                Object[] args, MethodProxy proxy) throws Throwable {
            System.out.println("哥去买包烟先,再帮你打包");
            Object result = method.invoke(object, args);
            System.out.println("垃圾太多了,倒掉吧");
            return result;
        }
    }

    3、客户端调用

    CglibProxy cglibProxy = new CglibProxy();
            Hello hello = (Hello)cglibProxy.getProxyInstance(new Hello());
            hello.sayHello();
  • 相关阅读:
    linux 打包 压缩
    HDU 2036 改革春风吹满地
    Windows 7 蓝屏代码大全 & 蓝屏全攻略
    Linux Shell參数扩展(Parameter Expansion)
    android不是内部或外部命令,也不是可执行的程序或批处理文件
    Object类
    抽象类中注意事项
    抽象类和接口的区别
    类接口之间的关系
    接口
  • 原文地址:https://www.cnblogs.com/pan2011/p/3871309.html
Copyright © 2011-2022 走看看