• 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();
  • 相关阅读:
    loadrunner -27778 https连接问题
    https调试
    Session Alerts
    Pause Web Sessions
    Customize Web Sessions List
    单例模式:Java单例模式的几种写法及它们的优缺点
    Activity: launchMode 和 Intent.FLAG_ACTIVITY_CLEAR_TOP
    TextView: android:ellipsize="marquee" 跑马灯效果无效的问题
    Socket通信(1):搭建开发环境
    linux: QT安装时出现段错误segmentation fault
  • 原文地址:https://www.cnblogs.com/pan2011/p/3871309.html
Copyright © 2020-2023  润新知