Java代理模式之CGLIB動態(tài)代理

了解什么是動態(tài)代理模式棺耍,可參考Java設計模式之代理模式

簡介

前面我們了解了JDK動態(tài)代理技術糜颠,發(fā)現(xiàn)其真實對象必須提供接口才可以使用耕拷。在一些不提供接口的環(huán)境中讼昆,只能采用一些別的第三方技術,比如CGLIB動態(tài)代理骚烧。它的有事在于不需要提供接口浸赫,只要一個非抽象類就可以實現(xiàn)動態(tài)代理。

  • 實現(xiàn)代理邏輯的類需要實現(xiàn)net.sf.cglib.proxy.MethodInterceptor接口
  • 下面示例的具體代碼可到cglib動態(tài)代理中下載赃绊。
  • 實驗需要引入CGLIB jar包
   <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>2.2.2</version>
    </dependency>

示例

【真實對象類】

public class HelloGod {
    private String name;

    public HelloGod(String name){
        this.name = name;
    }

    public void helloGod(){
        System.out.println("hello " + name);
    }
}

【動態(tài)代理綁定和代理邏輯實現(xiàn)】

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class CglibProxyExample implements MethodInterceptor {

    /**
     * @param cls Class類
     * @return Class的CGLIB代理對象
     */
    public Object getProxy(Class cls, Class[] argumentTypes, Object[] arguments){
        //CGLIB enhancer增強類對象
        Enhancer enhancer = new Enhancer();
        //設置增強類型
        enhancer.setSuperclass(cls);
        //定義代理對象為當前對象既峡,要求當前對象實現(xiàn)MethodInterceptor方法
        enhancer.setCallback(this);
        //生成并返回代理對象
        return enhancer.create(argumentTypes ,arguments);
    }

    /**
     * @param proxy 代理對象
     * @param method 方法
     * @param args 方法參數(shù)
     * @param methodProxy 方法代理
     * @return 代理邏輯返回
     * @throws Throwable 拋出異常
     */
    @Override
    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        System.err.println("調用真實對象前");

        //CGLIB反射調用真實對象方法
        Object result = methodProxy.invokeSuper(proxy, args);

        System.err.println("調用真實對象后");

        return result;
    }
}

【測試】

public class TestCglibProxy {

    public static void main(String[] args) {
        CglibProxyExample cglibProxyExample = new CglibProxyExample();
        Class[] argumentTypes = new Class[]{String.class};
        Object[] arguments = new Object[]{"baipengfei"};
        HelloGod helloGod = (HelloGod) cglibProxyExample.getProxy(HelloGod.class, argumentTypes ,arguments);
        helloGod.helloGod();
    }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碧查,隨后出現(xiàn)的幾起案子运敢,更是在濱河造成了極大的恐慌,老刑警劉巖忠售,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件传惠,死亡現(xiàn)場離奇詭異,居然都是意外死亡稻扬,警方通過查閱死者的電腦和手機卦方,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泰佳,“玉大人盼砍,你說我怎么就攤上這事尘吗。” “怎么了浇坐?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵摇予,是天一觀的道長。 經常有香客問我吗跋,道長侧戴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任跌宛,我火速辦了婚禮酗宋,結果婚禮上,老公的妹妹穿的比我還像新娘疆拘。我一直安慰自己蜕猫,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布哎迄。 她就那樣靜靜地躺著回右,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漱挚。 梳的紋絲不亂的頭發(fā)上监氢,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天坊饶,我揣著相機與錄音嫂沉,去河邊找鬼驾锰。 笑死,一個胖子當著我的面吹牛白华,可吹牛的內容都是我干的慨默。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼弧腥,長吁一口氣:“原來是場噩夢啊……” “哼厦取!你這毒婦竟也來了?” 一聲冷哼從身側響起管搪,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤虾攻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抛蚤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體台谢,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡寻狂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年岁经,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛇券。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡缀壤,死狀恐怖樊拓,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情塘慕,我是刑警寧澤筋夏,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站图呢,受9級特大地震影響条篷,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蛤织,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一赴叹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧指蚜,春花似錦乞巧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至免猾,卻和暖如春是辕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猎提。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工免糕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忧侧。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓石窑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚓炬。 傳聞我的和親對象是個殘疾皇子松逊,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容

  • 每個人的成長史都是一部血淚史驯击。初出茅廬的職場新人總免不了被身邊的資深同事點評兩句烁兰,也經常被領導看不慣一些做法。 記...
    橙蜂破浪閱讀 502評論 0 0
  • 生活在一個信息爆炸的時代,如果沒有好好過濾和甄別信息暇矫,沒有收藏和整理的方法主之,會在信息洪流里越來越焦慮择吊。 關注了許多...
    sally婧閱讀 231評論 2 0
  • 刷著朋友圈,穎子看到了一凡曬出的婚紗照槽奕,還有几睛,購房合同。 穎子突然覺得很難受粤攒。 她點開一凡的微信所森。 “你還是在城市...
    曉宇姑娘閱讀 527評論 8 9
  • 很多年后偶遇暗戀的人會是什么樣的心情?我第一反應是假裝沒有認出來然后假裝鎮(zhèn)定卻手足無措夯接。就在兩個小時前我遇到了六年...
    卡啦啦喲閱讀 385評論 0 0