91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JDK實現動態代理的方式

發布時間:2021-08-24 11:34:54 來源:億速云 閱讀:116 作者:chen 欄目:開發技術

這篇文章主要介紹“JDK實現動態代理的方式”,在日常操作中,相信很多人在JDK實現動態代理的方式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JDK實現動態代理的方式”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

JDK代理,代理的是接口,那么筆者想一想,既然代理的是接口,那如果沒有實現類怎么辦,能不能代理。答案是可以的,Mybatis就是這樣的。

Mybatis使用JDK動態代理來實現Mapper接口,事先保存好Mapper接口,和接口聲明的方法,返回值,參數類型,然后代理類的方法調用的時候使用MapperMethod這個事先放入方法緩存里的對象來真實調用功能。

筆者極度簡化了一下代碼:

被代理的接口:

public interface Subject2 {
 
    String selectById();
}

這個接口可以看成是Mapper接口

代理對象:

public class SubjectProxy2<T> implements InvocationHandler {
 
    private Class<T> proxyInterface;
    //這里可以維護一個緩存,存這個接口的方法抽象的對象
 
    
 
    SubjectProxy2(Class<T> proxyInterface){
        this.proxyInterface = proxyInterface;
    }
 
 
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if (method.getName().equals("selectById")){
            //String result = (String) method.invoke(proxyInterface,args);
            //這里可以得到方法抽象對象來調用真的的查詢方法
            System.out.println("selectById調用成功");
        }
        return null;
    }
 
    public T getProxy(){
        return (T) Proxy.newProxyInstance(proxyInterface.getClassLoader(),new Class[]{proxyInterface},this);
    }
}

這個代理類使用了泛型,說明這個代理類可以代理所有的mapper接口。

那么接下來測試一下:

public class ProxyTest2 {
 
    public static void main(String[] args) {
        SubjectProxy2<Subject2> subjectProxy2 = new SubjectProxy2(Subject2.class);
        Subject2 subject2 = subjectProxy2.getProxy();
        subject2.selectById();
    }
}

結果不言而喻。肯定會有相應的輸出

沒有看mybatis源碼的時候,我以為動態代理一定要要有實現類才能代理,但是看了優秀的頂級大牛的源碼之后,我才發現,原來還可以這樣。


到此,關于“JDK實現動態代理的方式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jdk
AI

临桂县| 东乌珠穆沁旗| 梅州市| 克东县| 棋牌| 饶平县| 霍州市| 渝中区| 广州市| 疏勒县| 平顺县| 衡山县| 汶川县| 洮南市| 勐海县| 黎城县| 徐州市| 垦利县| 拉萨市| 昭平县| 乡城县| 福安市| 阿荣旗| 喀喇沁旗| 泽库县| 蒙自县| 新化县| 枣阳市| 武汉市| 黑龙江省| 洛南县| 南昌县| 类乌齐县| 肥城市| 侯马市| 增城市| 图木舒克市| 甘洛县| 顺义区| 钟祥市| 行唐县|