Dieser Artikel beschreibt den dynamischen Proxy -Modus des Java -Designmusters. Teilen Sie es für Ihre Referenz wie folgt weiter:
Der statische Proxy -Modus wurde früher eingeführt und dynamischer Proxy ist leistungsfähiger als der statische Proxy -Modus. Es kann bei der Ausführung des Programms dynamisch Proxy -Objekte erzeugen. Die sogenannte dynamische Proxy-Klasse ist eine Klasse, die zur Laufzeit generiert wird. Bei der Erzeugung müssen Sie eine Reihe von Schnittstellen bereitstellen, und die dynamische Proxy -Klasse behauptet, dass sie diese Schnittstellen implementiert. Natürlich fungiert die dynamische Proxy -Klasse als Proxy. Sie versuchen nicht, Ihnen zu helfen, umfangreiche Arbeit zu leisten. Wenn Sie seine Instanz generieren, müssen Sie einen Handler zur Verfügung stellen und er übernimmt die eigentliche Arbeit.
Die Rolle des dynamischen Proxys ist die gleiche wie die eines statischen Proxy:
① Abstract -Rolle: Eine gemeinsame Schnittstelle zwischen realen Objekten und Proxy -Objekten. Was muss getan werden, um echte Objekte und Proxy -Objekte zu deklarieren.
② Wirkliche Rolle: Implementieren Sie abstrakte Rollen, definieren Sie die Geschäftslogik, die durch die wirkliche Rolle implementiert werden soll, und werden von der Proxy -Rolle bezeichnet.
③ Dynamische Proxy -Rolle: Die InvocationHandler -Schnittstelle muss implementiert werden und die Invoke -Methode wird implementiert. Dynamic Proxy ist der Ansicht, dass er eine Objekttypreferenz enthält, die die Rolle angibt, die dynamischer Proxy erfordert. Definiert als Objekttyp, was bedeutet, dass jeder Objekttyp dynamisch vergrößert werden kann.
Hier ist ein einfaches Code -Beispiel für ein einfaches dynamisches Proxy -Muster:
1. Abstrakte Rolle : Eine gemeinsame Schnittstelle zwischen realen Objekten und Proxy -Objekten. Was muss getan werden, um echte Objekte und Proxy -Objekte zu deklarieren.
Paket com.tydic.dynamicproxy; öffentliche Schnittstelle Fach {public void request ();}2. Wirkliche Rolle : Eine abstrakte Rolle muss implementiert werden, was ein Objekt ist, das zu vervollkommnen ist.
Paket com.tydic.dynamicproxy; öffentliche Klasse RealSubject implementiert das Thema {@Override public void request () {System.out.println ("From Real Subjekt!"); }} 3.. Dynamische Proxy -Rolle : Sie müssen die InvocationHandler -Schnittstelle implementieren und die Invoke -Methode in das public Object invoke(Object proxy, Method method, Object[] args) . Die Invoke -Methode hat drei Parameter. Der Parameterproxy bezieht sich auf die Proxy -Klasse, die Methode repräsentiert die Proxy -Methode, Args ist das Parameter -Array in der Methode, und das Rückgabewertobjekt ist der Wert, der durch den Methodenaufruf der Proxyinstanz zurückgegeben wird. Diese abstrakte Methode wird in der Proxy -Klasse dynamisch implementiert.
Paket com.tydic.dynamicproxy; import Java.lang.reflect.invocationHandler; importieren java.lang.reflect.method; public class dynamics -implements implements invocationHandler {private Object sub; // Agent Public Dynamicsubject (Objekt Obj) {this.sub = obj; } @Override public Object Invoke (Object Proxy, Methode Methode, Object [] args) löscht Throwable {System.out.println ("Bevor Anrufe:" + Methode); // Die Funktion kann vor und nach der Proxy -Methode -Methode hinzugefügt werden. System.out.println ("Nach dem Anruf:" + Methode); null zurückkehren; }} 4. Schreiben Sie Client -Code : Eine Proxy -Klasse ist erforderlich. Die übergeordnete Klasse aller dynamischen Proxy -Klassen der Proxy -Klasse, die statische Methoden zum Erstellen dynamischer Proxy -Klassen und -Anstanzen bereitstellen. Die Proxy -Klasse hat eine statische Methode public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) . Der erste Parameter repräsentiert den Klassenlader der dynamischen Proxy -Klasse, das zweite ist das Klassenarray der Schnittstelle, die die dynamische Proxy -Klasse implementiert sollte, und der dritte Parameter ist das InvocationHandler -Objekt. Wenn der dynamische Proxy die Methode aufruft, für die der Proxy erforderlich ist, wird die Invoke -Methode des InvocationHandler -Objekts aufgerufen.
paket com.tydic.dynamicproxy; import Java.lang.reflect.proxy; Public Class Client {public static void main (String [] args) {Subjekt thema = new RealSubject (); Dynamicsubject Handle = New DynamicsUbject (Subjekt); // Dynamic Generation Proxy -Objekt -Subjekt sub = (Subjekt) proxy.newproxyInstance (dynamicsubject.class.getClassloader (), Subjekt.getClass (). GetInterfaces (), Handle); sub.request (); // Die aufgerufene Handlungsmethode wird tatsächlich als}} bezeichnetFor more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.