cglib 代理

cglib 代理框架

什么是cglib?ide

  一段介绍是这样的:性能

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

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

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

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

cglib 代理特色:对象

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

由于采用的是继承,因此不能对 finall 类进行继承。继承

 

须要用到两个jar: cglib 和 asm

实例:

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

/** 没有接口的类
 * Created by hp on 14-7-27.
 */
public class Hello {

    public void sayHello() {
        System.out.println("Hello ,world");
    }
}

二、代理类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;
    }
}

三、客户端调用

CglibProxy cglibProxy = new CglibProxy();
        Hello hello = (Hello)cglibProxy.getProxyInstance(new Hello());
        hello.sayHello();
相关文章
相关标签/搜索