Java Dynamic Proxy wurde auf der mit Java verbundenen API erklärt, also werde ich sie hier nicht schreiben. Was ich verstehe:
Erweitern Sie die Funktionalität einer bestimmten Methode in einer bestimmten Schnittstelle, und dies ist der Proxy. Ein Proxy ist eine Aufrufmethode über ein Anruf -Handler -Objekt, das einer Proxy -Instanz zugeordnet ist.
Schauen wir es uns mit einem Beispiel an:
Schnittstelle:
öffentliche Schnittstelle num {void show (); int GetNum (); int getProduct (int x);} Implementierungsklasse:
öffentliche Klasse mynum implementiert num {@Override public int getnum () {return 3; } @Override public int getProduct (int x) {return x; } @Override public void show () {System.out.println ("Die zugrunde liegende Methode druckt die Nummer 99"); }} Schauen wir uns zunächst an, wie die Invoke -Methode in der API beschrieben wird
Das heißt, der Anrufhandler ruft die zugrunde liegende Methode auf, die das Methodenobjekt für das Objekt der Implementierungsklasse der Schnittstelle darstellt.
Der erste Weg, um den Proxy zu implementieren:
public class numproxy {private Object num; // Konstruieren Sie das Objekt der Implementierungsklasse der Schnittstelle über die Konstruktormethode öffentlich Numproxy (Objekt num) {this.num = num; } öffentliches Objekt getNumByProxy () {Object numproxy = proxy.newproxyinstance (num.getClass (). getClassloader (), neue Klasse [] {num.class}, New InvocationHandler () { /*** Methode: Die Methodeinstanz entsprechend der Interface -Methode. Verstehen ist das Parameter -Array von realen Methoden*/ @Override öffentlich (Objektprofi, Methode, Objekt [] args) Throwable {Object OBJ = NULL; (Integer) obj * 2; Return Numproxy; }} Der zweite Weg zur Implementierung von Proxy: Durch die Implementierung der InvocationHandler -Schnittstelle
public class numproxyimpl implements invocationHandler {// Hier habe ich den Schnittstellentyp konkret gemacht und es ist nicht als Objekt private num geschrieben; public numproxyimpl (num num) {this.num = num; } @Override public Object Invoke (Object Proxy, Methode Methode, Object [] args) wirft Throwable {Object obj = null; String methodname = method.getName (); if ("getProduct" .Equals (methodName)) {System.out.println ("Proxy: getProduct () start"); obj = methode.invoke (num, args); obj = (Ganzzahl) obj * 2; System.out.println ("Proxy: getProduct () end"); } else if ("show" .equals (methodName)) {System.out.println ("Proxy: show () start"); obj = methode.invoke (num, args); System.out.println ("Proxy: show () end"); } return obj; }} Testcode:
public class testnum {public static void main (String [] args) {// test numproxy np = new numproxy (new mynum ()); Numproxy = (num) np.getNumByProxy (); int x = numproxy.getProduct (2); System.out.println (x); numproxy.show (); System.out.println ("---------------------"); Numproxyimpl npi = new numproxyimpl (new mynum ()); Numpro = (num) proxy.newproxyinstance (num.class.getClassloader (), neue Klasse [] {num.class}, npi); int n = numpro.getProduct (3); System.out.println (n); numpro.show (); }} Konsolenergebnisse:
Die zweite Methode ist etwas verwirrt. Ich weiß nicht, ob Sie es haben. Das heißt, es wird als Invoke -Methode in NumproxyImpl bezeichnet, die nicht angezeigt wird, aber ausgeführt wurde. Ja, lass uns runtergehen, um das zu sehen.
Wenn Sie nicht problematisch sein möchten, denken Sie daran.
Beispielsweise kann der Codierungsprozess verwendet werden, um den Proxy zu verwenden und beim nächsten Mal ein Beispiel zu schreiben.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.