欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis接口的簡單實現原理分析

 更新時間:2017年07月09日 14:46:43   作者:蘸點醬  
這里僅僅舉個簡單例子來說明原理,不是完全針對MyBatis的,這種思想我們也可以應用在其他地方。地mybatis接口實現原理感興趣的朋友一起看看吧

用過MyBatis3的人可能會覺得為什么MyBatis的Mapper接口沒有實現類,但是可以直接用?

那是因為MyBatis使用Java動態(tài)代理實現的接口。

這里僅僅舉個簡單例子來說明原理,不是完全針對MyBatis的,這種思想我們也可以應用在其他地方。

定義一個接口

public interface MethodInterface { String helloWorld(); }

 實現動態(tài)代理接口

public class MethodProxy<T> implements InvocationHandler {
  private Class<T> methodInterface;
  public MethodProxy(Class<T> methodInterface) {
    this.methodInterface = methodInterface;
  }
  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    System.out.println("=========================");
    System.out.println("方法名:" + method.getName());
    //針對不同的方法進行不同的操作
    return null;
  }
}

這里針對invoke方法簡單說說MyBatis的實現原理,在該方法中,我們通過Method能夠獲取接口和方法名,接口的全名相當于MyBatis XML中的namespace,方法名相當于具體一個方法中的id。也就是說通過動態(tài)代理后,可以通過SqlSession來通過namespace.id方式來調用相應的方法。使用接口更方便,但是是一種間接的方式。

動態(tài)代理工廠類

public class MethodProxyFactory {
  public static <T> T newInstance(Class<T> methodInterface) {
    final MethodProxy<T> methodProxy = new MethodProxy<T>(methodInterface);
    return (T) Proxy.newProxyInstance(
        Thread.currentThread().getContextClassLoader(), 
        new Class[]{methodInterface}, 
        methodProxy);
  }
}

通過該工廠類可以生成任意接口的動態(tài)代理類。

測試

MethodInterface method = MethodProxyFactory.newInstance(MethodInterface.class);
method.helloWorld();

總結

一般談到動態(tài)代理我們通常的用法都是處理事務、日志或者記錄方法執(zhí)行效率等方面的應用。都是對實現類方法的前置或者后置的特殊處理。

通過本文,其實可以看到另一種應用方向,那就是不需要實現類,直接通過動態(tài)代理執(zhí)行接口方法,MyBatis使用這種方式方便了我們調用方法,利用這種思路我們也許可以在別的方面做出一些更好的設計。

以上所述是小編給大家介紹的MyBatis接口的簡單實現原理分析,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

相關文章

  • Java中的Timer與TimerTask原理詳解

    Java中的Timer與TimerTask原理詳解

    這篇文章主要介紹了Java中的Timer與TimerTask原理詳解,timerTask本身沒什么意義,只是和timer集合操作的一個對象,實現它就必然有對應的run方法,以被調用,他甚至于根本不需要實現Runnable,需要的朋友可以參考下
    2023-07-07
  • Java構造函數通透理解篇

    Java構造函數通透理解篇

    這篇文章主要介紹了Java構造函數,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Spring Boot文件上傳簡單實例代碼

    Spring Boot文件上傳簡單實例代碼

    在本篇文章里小編給大家分享的是關于Spring Boot 文件上傳簡易教程以及相關知識點,需要的朋友們參考下。
    2019-08-08
  • Mybatis-Plus 搭建與使用入門(小結)

    Mybatis-Plus 搭建與使用入門(小結)

    Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強工具,這篇文章主要介紹了Mybatis-Plus 搭建與使用入門(小結),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Java Swing中的表格(JTable)和樹(JTree)組件使用實例

    Java Swing中的表格(JTable)和樹(JTree)組件使用實例

    這篇文章主要介紹了Java Swing中的表格(JTable)和樹(JTree)組件使用實例,本文同時講解了表格和樹的基本概念、常用方法、代碼實例,需要的朋友可以參考下
    2014-10-10
  • JAVA觀察者模式的的講解及代碼實現

    JAVA觀察者模式的的講解及代碼實現

    這篇文章主要為大家詳細介紹了JAVA的觀察者模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 詳解Java線程池是如何重復利用空閑線程的

    詳解Java線程池是如何重復利用空閑線程的

    在Java開發(fā)中,經常需要創(chuàng)建線程去執(zhí)行一些任務,實現起來也非常方便,此時,我們很自然會想到使用線程池來解決這個問題,文中給大家提到使用線程池的好處,對Java線程池空閑線程知識感興趣的朋友一起看看吧
    2021-06-06
  • Java實現HashMap排序方法的示例詳解

    Java實現HashMap排序方法的示例詳解

    這篇文章主要通過一些示例為大家介紹了Java對HashMap進行排序的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解一下
    2022-05-05
  • 讀取spring配置文件的方法(spring讀取資源文件)

    讀取spring配置文件的方法(spring讀取資源文件)

    這篇文章主要介紹了讀取spring配置文件的方法,需要的朋友可以參考下
    2014-02-02
  • JPA中@JoinColumn的name和referencedColumnName屬性的區(qū)別及說明

    JPA中@JoinColumn的name和referencedColumnName屬性的區(qū)別及說明

    這篇文章主要介紹了JPA中@JoinColumn的name和referencedColumnName屬性的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論