Java Dynamic Proxy a été expliquée sur l'API connectée à Java, donc je ne l'écrirai pas ici. Ce que je comprends:
Étendez les fonctionnalités d'une méthode spécifique dans une interface spécifique, et c'est le proxy. Un proxy est une méthode d'appel via un objet de gestionnaire d'appels associé à une instance de proxy.
Jetons un œil à cela avec un exemple:
interface:
interface publique num {void show (); int getnum (); int getProduct (int x);} Classe d'implémentation:
classe publique Mynum implémente num {@Override public int getnum () {return 3; } @Override public int getProduct (int x) {return x; } @Override public void show () {System.out.println ("La méthode sous-jacente imprime le numéro 99"); }} Voyons d'abord comment la méthode invoquée est décrite dans l'API
C'est-à-dire que le gestionnaire d'appels appelle la méthode sous-jacente représentant l'objet de méthode à l'objet de classe d'implémentation de l'interface.
La première façon d'implémenter le proxy:
classe publique numproxy {objet privé num; // Construisez l'objet de classe d'implémentation de l'interface via la méthode du constructeur public numproxy (objet num) {this.num = num; } objet public getNumbyProxy () {objet numproxy = proxy.newproxyinstance (num.getClass (). getClassOader (), nouvelle classe [] {num.class}, new invocationhandler () {/ ** * méthode: l'instance de méthode correspondant à l'interface appelée: l'instance proxy. est le tableau des paramètres des méthodes réelles * / @Override Object Invoke (objet proxy, méthode, objet [] args) Throws Throws {objet obj = null; (Integer) OBJ *; retour Numproxy; }} La deuxième façon d'implémenter le proxy: en implémentant l'interface invocationhandler
La classe publique NumproxyImpl implémente InvocationHandler {// Ici, j'ai concrété le type d'interface, et il n'est pas écrit comme objet privé num; public numproxyImpl (num num) {this.num = num; } @Override Public Object Invoke (Proxy d'objet, méthode de la méthode, objet [] args) lève le throwable {objet obj = null; String MethodName = méthode.getName (); if ("getProduct" .Equals (méthodyName)) {System.out.println ("proxy: getProduct () start"); obj = méthode.invoke (num, args); obj = (entier) obj * 2; System.out.println ("Proxy: getProduct () end"); } else if ("show" .equals (methodname)) {System.out.println ("proxy: show () start"); obj = méthode.invoke (num, args); System.out.println ("proxy: show () end"); } return obj; }} Code de test:
classe publique TestNum {public static void main (String [] args) {// test numproxy np = new numproxy (new mynum ()); Num numproxy = (num) np.getNumbyProxy (); int x = numproxy.getProduct (2); System.out.println (x); numproxy.show (); System.out.println ("---------------------"); NumproxyImpl npi = new numproxyImpl (new MyNum ()); Num numpro = (num) proxy.newProxyInstance (num.class.getClassloadher (), new class [] {num.class}, npi); int n = numpro.getProduct (3); System.out.println (n); numpro.show (); }} Résultats de la console:
La deuxième méthode est un peu confuse. Je ne sais pas si vous l'avez. Autrement dit, il s'appelle la méthode invoquée dans numproxyimpl qui n'est pas affichée, mais elle a été exécutée. Oui, allons voir cela.
Si vous ne voulez pas être gênant, rappelez-vous simplement.
Par exemple, le processus d'encodage peut être utilisé pour utiliser le proxy et écrire un exemple la prochaine fois.
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.