首页 > 代码库 > cglib 代理

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();

cglib 代理