Heim  >  Artikel  >  Java  >  Detailliertes Lernen von statischem Java-Proxy und dynamischem Proxy

Detailliertes Lernen von statischem Java-Proxy und dynamischem Proxy

黄舟
黄舟Original
2016-12-12 13:24:501709Durchsuche

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.



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn