国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

CGLIB動態代理模式的理解

Joonas / 1131人閱讀

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

CGLIB動態代理模式

CGLIB動態代理模式 是一種第三方的動態代理模式,我們在使用這個代理模式的時候,需要導入三方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動態代理模式不需要想JDK動態代理模式那樣使用接口,一個非抽象類就可以,但是前提是這個非抽象類需要實現MethodInterceptor接口,并重寫intercept方法。我們通過代碼來了解其實現原理。

//創建一個普通類
public class SayHello {
    public void say(String name) {
        System.out.println("您好," + name);
    }
}
//CGLIB動態代理類
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.定義代理邏輯對象為當前對象,要求當前對象實現 MethodInterceptor 接口
        en.setCallback(this);
        //生成代理對象并返回
        Object proxy = en.create();
        return proxy;
    }
    /**
     * 代理邏輯方法
     * 1.proxy 代理對象
     * 2.method 方法
     * 3.args 方法參數
     * 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");
    }
}
結果展示

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

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

相關文章

  • 設計模式代理模式

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

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

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

    CatalpaFlat 評論0 收藏0
  • Java動態代理 jdk和cglib實現比較

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

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

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

    gclove 評論0 收藏0
  • 淺入淺出Java代理三種實現

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

    lewif 評論0 收藏0

發表評論

0條評論

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