成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

CGLIB動態(tài)代理模式的理解

Joonas / 1139人閱讀

摘要:動態(tài)代理模式動態(tài)代理模式是一種第三方的動態(tài)代理模式,我們在使用這個代理模式的時候,需要導入三方包如下動態(tài)代理模式不需要想動態(tài)代理模式那樣使用接口,一個非抽象類就可以,但是前提是這個非抽象類需要實現(xiàn)接口,并重寫方法。

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

CGLIB動態(tài)代理模式 是一種第三方的動態(tài)代理模式,我們在使用這個代理模式的時候,需要導入三方jar包,如下:

asm-2.2.3.jar

asm-commons-2.2.3.jar

asm-util-2.2.3.jar

cglib-nodep-2.1_3.jar

CGLIB動態(tài)代理模式不需要想JDK動態(tài)代理模式那樣使用接口,一個非抽象類就可以,但是前提是這個非抽象類需要實現(xiàn)MethodInterceptor接口,并重寫intercept方法。我們通過代碼來了解其實現(xiàn)原理。

//創(chuàng)建一個普通類
public class SayHello {
    public void say(String name) {
        System.out.println("您好," + name);
    }
}
//CGLIB動態(tài)代理類
public class CglibProxy implements MethodInterceptor {
    
    /**
     * 生成CGLIB代理對象
     * @param cls -Class類 需要被代理的真實對象
     * @return
     */
    public Object getProxy(Class cls) {
        //1.CGLIB enhancer增強類對象
        Enhancer en = new Enhancer();
        //2.設置增強類型
        en.setSuperclass(cls);
        //3.定義代理邏輯對象為當前對象,要求當前對象實現(xiàn) MethodInterceptor 接口
        en.setCallback(this);
        //生成代理對象并返回
        Object proxy = en.create();
        return proxy;
    }
    /**
     * 代理邏輯方法
     * 1.proxy 代理對象
     * 2.method 方法
     * 3.args 方法參數(shù)
     * 4.methodProxy 方法代理
     */
    @Override
    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        System.out.println("調用代理對象之前的邏輯~");
        Object result = methodProxy.invokeSuper(proxy, args);
        System.out.println("調用代理對象之后的邏輯~");
        return result;
    }
}
//測試代碼
public class TestCglibProxy {
    public static void main(String[] args) {
        CglibProxy cglib = new CglibProxy();
        SayHello proxy = (SayHello) cglib.getProxy(SayHello.class);
        proxy.say("James");
    }
}
結果展示

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/69601.html

相關文章

  • 設計模式代理模式

    摘要:下面我們通過玩英雄聯(lián)盟代練的例子來說明下登錄游戲贏下了一局英雄聯(lián)盟,獲得了金幣測試結果登錄游戲贏下了一局英雄聯(lián)盟,獲得了金幣可以這樣理解,自己寫代理類的方式就是靜態(tài)代理。 前言 剛上大學那會,英雄聯(lián)盟火的一塌糊涂,當時每天都想著升到30級開啟排位之旅。可是升到30級需要大把的時間不說,這時候匹配到的人,水平過于參差不齊,問候你全家的事經常發(fā)生,那個時候就想要是能有個代練幫我升到30級該...

    xuweijian 評論0 收藏0
  • JAVA代理模式理解和應用

    摘要:代理模式代理模式通俗一點的解釋就是在操作一個對象和對象中的方法時,不是直接操作這個對象,還是通過一個代理對象來操作這個實際的目標對象。 代理模式: 代理模式通俗一點的解釋就是在操作一個對象和對象中的方法時,不是直接操作這個對象,還是通過一個代理對象來操作這個實際的目標對象。應用場景一般是需要在執(zhí)行某個已經寫好的方法前后再添加一段邏輯,比如執(zhí)行方法前打印日志,或者在執(zhí)行方法之前和之后打時...

    CatalpaFlat 評論0 收藏0
  • Java動態(tài)代理 jdk和cglib實現(xiàn)比較

    摘要:與靜態(tài)代理對比,動態(tài)代理是在動態(tài)生成代理類,由代理類完成對具體方法的封裝,實現(xiàn)的功能。本文將分析中兩種動態(tài)代理的實現(xiàn)方式,和,比較它們的異同。那如何動態(tài)編譯呢你可以使用,這是一個封裝了的庫,幫助你方便地實現(xiàn)動態(tài)編譯源代碼。 發(fā)現(xiàn)Java面試很喜歡問Spring AOP怎么實現(xiàn)的之類的問題,所以寫一篇文章來整理一下。關于AOP和代理模式的概念這里并不做贅述,而是直奔主題,即AOP的實現(xiàn)方...

    h9911 評論0 收藏0
  • Java代理設計模式(Proxy)四種具體實現(xiàn):靜態(tài)代理動態(tài)代理

    摘要:除了和外,我們還有最后一招我直接把一個代理類的源代碼用字符串拼出來,然后基于這個字符串調用的編譯期,動態(tài)的創(chuàng)建一個新的文件,然后動態(tài)編譯這個文件,這樣也能得到一個新的代理類。 面試問題:Java里的代理設計模式(Proxy Design Pattern)一共有幾種實現(xiàn)方式?這個題目很像孔乙己問茴香豆的茴字有哪幾種寫法? showImg(https://segmentfault.com/...

    gclove 評論0 收藏0
  • 淺入淺出Java代理三種實現(xiàn)

    摘要:代理模式的實現(xiàn)靜態(tài)代理優(yōu)缺點優(yōu)點只對對需要的方法加代理邏輯。通過繼承的方式進行代理,無論目標對象有沒有實現(xiàn)接口都可以代理,但是無法處理的情況。 注意:本文所有的class使用的static修飾主要是為了能在一個類里面測試。實際項目中不應該這樣做的,應該分包分class。文字描述不是很多,還是看代碼比較好理解吧... 1. Java代理的理解 代理模式是一種設計模式,簡單說即是在不改變源...

    lewif 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<