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();
相關文章
相關標籤/搜索