Maison > Java > javaDidacticiel > [Transfert] Principe de mise en œuvre simple de l'interface MyBatis

[Transfert] Principe de mise en œuvre simple de l'interface MyBatis

PHP中文网
Libérer: 2017-07-09 18:12:39
original
1323 Les gens l'ont consulté

Principe simple de mise en œuvre de l'interface MyBatis

Les personnes qui ont utilisé MyBatis3 peuvent se demander pourquoi l'interface Mapper de MyBatis n'a pas de classe d'implémentation, mais elle peut être utilisée directement ?

C'est parce que MyBatis utilise l'interface implémentée par le proxy dynamique Java.

Voici juste un exemple simple pour illustrer le principe. Il n'est pas tout à fait spécifique à MyBatis. On peut également appliquer cette idée à d'autres endroits.

Définir une interface

<span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> MethodInterface { String helloWorld(); }
Copier après la connexion

Implémenter une interface proxy dynamique

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> MethodProxy<T> <span style="color: #0000ff">implements</span><span style="color: #000000"> InvocationHandler {
    </span><span style="color: #0000ff">private</span> Class<T><span style="color: #000000"> methodInterface;

    </span><span style="color: #0000ff">public</span> MethodProxy(Class<T><span style="color: #000000"> methodInterface) {
        </span><span style="color: #0000ff">this</span>.methodInterface =<span style="color: #000000"> methodInterface;
    }

    @Override
    </span><span style="color: #0000ff">public</span> Object invoke(Object proxy, Method method, Object[] args) <span style="color: #0000ff">throws</span><span style="color: #000000"> Throwable {
        System.out.println(</span>"========================="<span style="color: #000000">);
        System.out.println(</span>"方法名:" +<span style="color: #000000"> method.getName());
        </span><span style="color: #008000">//</span><span style="color: #008000">针对不同的方法进行不同的操作</span>
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span><span style="color: #000000">;
    }
}</span>
Copier après la connexion

Nous parlons brièvement ici du principe d'implémentation de MyBatis pour la méthode invoke Dans cette méthode, nous pouvons obtenir l'interface et le nom de la méthode via Méthode. Le nom complet de l'interface est équivalent à namespace dans MyBatis XML. , et le nom de la méthode est équivalent à id dans une méthode spécifique. C'est-à-dire qu'après avoir passé le proxy dynamique, vous pouvez utiliser SqlSession pour appeler la méthode correspondante via la méthode namespace.id. L'utilisation des interfaces est plus pratique, mais de manière indirecte.

Classe d'usine de proxy dynamique

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span><span style="color: #000000"> MethodProxyFactory {
    </span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <T> T newInstance(Class<T><span style="color: #000000"> methodInterface) {
        </span><span style="color: #0000ff">final</span> MethodProxy<T> methodProxy = <span style="color: #0000ff">new</span> MethodProxy<T><span style="color: #000000">(methodInterface);
        </span><span style="color: #0000ff">return</span><span style="color: #000000"> (T) Proxy.newProxyInstance(
                Thread.currentThread().getContextClassLoader(), 
                </span><span style="color: #0000ff">new</span><span style="color: #000000"> Class[]{methodInterface}, 
                methodProxy);
    }
}</span>
Copier après la connexion

Des classes proxy dynamiques pour n'importe quelle interface peuvent être générées via cette classe d'usine.

Test

MethodInterface method = MethodProxyFactory.newInstance(MethodInterface.<span style="color: #0000ff">class</span><span style="color: #000000">);
method.helloWorld();</span>
Copier après la connexion

Résumé

De manière générale, lorsqu'il s'agit d'agents dynamiques, notre utilisation habituelle est de gérer les transactions, les journaux ou l'efficacité d'exécution des méthodes d'enregistrement et d'autres applications. Il s'agit tous de traitements spéciaux de méthodes de classe pré- ou post-implémentation.

Grâce à cet article, nous pouvons en fait voir une autre direction d'application, c'est-à-dire qu'il n'est pas nécessaire d'implémenter la classe, et la méthode d'interface est exécutée directement via le proxy dynamique. MyBatis utilise cette méthode pour nous faciliter la tâche. Appelons la méthode. En utilisant cette idée, nous pouvons peut-être créer de meilleures conceptions sous d'autres aspects.

Texte original :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal