Eigenschaften des dynamischen Proxys:
Beim Proxying eines Objekts ist es nicht erforderlich, die Schnittstelle zu implementieren
Bei der Generierung des Proxy-Objekts wird die JDK-API verwendet, um den Proxy dynamisch zu erstellen Objekt im Speicher (Wir müssen den Schnittstellentyp angeben, den das erstellte Proxy-Objekt/Zielobjekt implementiert)
Ein anderer Name für dynamischen Proxy: JDK-Proxy, Schnittstellen-Proxy
Klassendiagramm:
Dynamischer Java-Proxy Die Klasse befindet sich unter dem Paket java.lang.reflect und umfasst im Allgemeinen die folgenden zwei Klassen:
1. Schnittstelle InvocationHandler: Diese Schnittstelle definiert nur einen Methodenaufruf für öffentliche Objekte (Objekt obj, Methodenmethode). , Object [] args) Bei der tatsächlichen Verwendung bezieht sich der erste Parameter obj im Allgemeinen auf die Proxy-Klasse, method auf die Proxy-Methode und args auf das Parameterarray der Methode. Diese abstrakte Methode wird dynamisch in der Proxy-Klasse implementiert.
2. Proxy: Diese Klasse ist eine dynamische Proxy-Klasse
static Object newProxyInstance(ClassLoader loader, Class[] interfaces,InvocationHandler h):
Gibt eine Instanz der Proxy-Klasse zurück. Die zurückgegebene Proxy-Klasse kann als Proxy-Klasse verwendet werden (die in der Schnittstelle der Proxy-Klasse deklarierten Methoden können verwendet werden).
Implementierungsschritte der dynamischen Generierung:
public interface Moveable { void move(); }
Testklasse: newProxyInstance(ClassLoader loader,Class[]
//实现Moveable 接口,并随机暂停一段时间 import java.util.Random; public class Car implements Moveable{ @Override public void move() { try{ Thread.sleep(new Random().nextInt(1000)); System.out.println("汽车行驶中"); } catch (InterruptedException e) { e.printStackTrace(); } } }
Das Auto beginnt zu fahren
Das Auto fährtHinweis:
JDK-Proxy kann nur Klassen vertreten, die keine Schnittstellen implementieren.
cglib implementiert das Proxying für Klassen für die angegebene Zielklasse und überschreiben Sie die Methoden, um eine Verbesserung zu erreichen. Da jedoch Vererbung verwendet wird, kann die endgültige geänderte Klasse nicht als Proxy verwendet werden, da Xiaoying selbst kein vollständiges Verständnis für diesen Bereich hat, daher werde ich es nicht erklären Hier können Sie auf die wichtigsten technischen Artikel anderer Blogs verweisen.Das obige ist der detaillierte Inhalt vonBeispielcode-Analyse für Java-Proxy-Muster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!