码迷,mamicode.com
首页 > 其他好文 > 详细

cglib 代理

时间:2014-07-27 21:59:39      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

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 代理

标签:

原文地址:http://www.cnblogs.com/pan2011/p/3871309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!