Heim >Java >javaLernprogramm >Detailliertes Lernen von statischem Java-Proxy und dynamischem Proxy
1. Proxy-Muster
Das Proxy-Muster ist ein häufig verwendetes Java-Entwurfsmuster. Das Merkmal ist, dass die Proxy-Klasse und die Delegate-Klasse dieselbe Schnittstelle haben. Die Proxy-Klasse ist hauptsächlich für die Vorverarbeitung von Nachrichten für die Delegate-Klasse verantwortlich , Filtern von Nachrichten und Weiterleiten von Nachrichten an die Delegatenklasse sowie Nachbearbeiten von Nachrichten usw.
Normalerweise besteht eine Verbindung zwischen Proxy-Klassen und Delegate-Klassen. Das Objekt der Proxy-Klasse selbst implementiert den Dienst nicht, sondern ist durch Aufruf verknüpft das Objekt der Delegate-Klasse zur Bereitstellung eines bestimmten Dienstes.
Je nach Erstellungszeitraum des Agenten kann die Agentenklasse in zwei Typen unterteilt werden:
Statischer Proxy: Von Programmierern oder bestimmten Tools erstellt, generiert er automatisch Quellcode und kompiliert ihn dann. Die .class-Datei der Proxy-Klasse existiert bereits, bevor das Programm ausgeführt wird.
Dynamischer Proxy: Wird mithilfe des Reflexionsmechanismus dynamisch erstellt, wenn das Programm ausgeführt wird.
2. Einzelner statischer Proxy
码如下: public interface CountDao { // 查看账户方法 public void queryCount(); } public class CountDaoImpl implements CountDao { public void queryCount() { System.out.println("查看账户方法..."); } } public class CountTrancProxy implements CountDao { private CountDao countDao; public CountProxy(CountDao countDao) { this.countDao = countDao; } @Override public void queryCount() { System.out.println("tranc start"); countDao.queryCount(); System.out.println("tranc end"); } } public class TestCount { public static void main(String[] args) { CountTrancProxy countProxy = new CountTrancProxy(new CountDaoImpl()); countProxy.updateCount(); } }
Tranc-Start
Kontomethode anzeigen...
Tranc-Ende
3. Mehrere statische Proxys
Basierend auf dem obigen Code, ein neuer
码如下: public class CountLogProxy implements CountDao { private CountDao countDao; public CountLogProxy(CountDao countDao) { this.countDao = countDao; } @Override public void queryCount() { System.out.println("Log start"); countDao.queryCount(); System.out.println("Log end"); } }
Protokollstart
Vor der Transaktionsverarbeitung
Kontoansichtsmethode...
Nach der Transaktionsverarbeitung
Protokollende
4. Zusammenfassung
Tatsächlich können Proxy-Klassen verwendet werden, um den Proxy-Effekt durch Vererbung oder Schnittstellenimplementierung zu erzielen. Wenn jedoch mehrere Proxy-Klassen miteinander kombiniert werden müssen, ist die Vererbung nicht flexibel Proxy-Klassen werden ständig neu geschrieben, und die Implementierung von Schnittstellen ist sehr einfach, indem die Proxy-Klassen durch Aggregation kombiniert werden.