Parlons du mode proxy java avec vous
1. Proxy statique
1.1 Le proxy proxy statique et la classe de proxy doivent maintenir une interface commune.
interface publique iUserdao {void Save ();}1.2 Classe proxy, objet cible
classe publique UserDao implémente iUserDao {@Override public void Save () {System.out.println ("----- Les données ont été enregistrées !!! ------"); }}1.3 Objets proxy
La classe publique UserDaOproxy implémente iUserDao {// Recevoir et enregistrer l'objet cible IBRIBLE IUSERDAO PRIVÉ; public userDaOproxy (ciserdao cible) {this.target = cible; } @Override public void Save () {System.out.println ("Démarrer la transaction ..."); Target.save (); // Méthode pour exécuter le System d'objet cible.out.println ("Soumettre la transaction ..."); }}1.4 Classe de test
classe publique application {public static void main (String [] args) {// objet cible iUserDao Target = new UserDao (); // proxy iUserdao proxy = new UserDaOproxy (cible); proxy.save (); // Exécuter la méthode proxy}} 2. Agent dynamique
2.1 De même, Dynamic Proxy doit également terminer une interface. (Similaire à ci-dessus)
2.2 L'objet cible est le même.
2.3 C'est juste différent dans les objets proxy
classe publique ProxyFactory {// conserver une cible d'objet privé d'objet cible; public proxyfactory (objet cible) {this.target = cible; } // générer un objet d'objet proxy public objet getProxyInstance () {return proxy.newproxyinstance (target.getClass (). GetClassLoader (), target.getClass (). GetInterfaces (), méthode invocationhandler () {@Override Object Invoke (objet proxy, méthode, objet [] args) thorws System.out.println ("Start Transaction"); }}2.4 Classe de test
classe publique application {public static void main (String [] args) {// objet cible iUserDao Target = new UserDao (); System.out.println (Target.getClass ()); // Créer un objet proxy pour l'objet cible iUserdao proxy = (iuserdao) new proxyfactory (cible) .getProxyInstance (); System.out.println (proxy.getClass ()); // Exécuter la méthode [Objet Proxy] proxy.save (); }} 3. Proxy CGLIB
3.1CGLIB Proxy n'a pas besoin de terminer l'interface, il n'a qu'à écrire la classe et la classe de proxy pour être proxy. Le proxy ici est le même que 1.2, il n'est donc plus écrit.
3.2 La classe proxy est différente. Lorsque vous utilisez le mode proxy CGLIB, vous devez vous référer au package de framework central de Spring.
Classe publique ProxyFactory implémente MethodInterceptor {// Maintenir la cible d'objet privé de l'objet cible; public proxyfactory (objet cible) {this.target = cible; } // Créez un objet proxy pour l'objet cible objet public getProxyInstance () {// 1. Tool Class Enhancer en = new Enhancer (); // 2. Définissez la classe parent en.SetSuperClass (Target.GetClass ()); // 3. Définissez la fonction de rappel en.setCallback (this); // 4. Créer une sous-classe (objet proxy) return en.create (); } @Override public Object Intercept (objet obj, méthode de la méthode, objet [] args, proxy methodproxy) lève throwable {System.out.println ("start transaction ..."); // Méthode pour exécuter l'objet d'objet cible returnValue = méthode.invoke (cible, args); System.out.println ("Soumettre la transaction ......"); retour returnValue; }}3.3 Classe de test
classe publique application {public static void main (string [] args) {// objet cible userdao cible = new UserDao (); System.out.println (Target.getClass ()); // objet proxy userdao proxy = (userdao) new proxyfactory (cible) .getProxyInstance (); System.out.println (proxy.getClass ()); // Méthode pour exécuter proxy objet proxy.save (); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.