Sprechen wir mit Ihnen über den Java -Proxy -Modus
1. statischer Proxy
1.1 Sowohl der statische Proxy -Proxy als auch die Proxy -Klasse müssen eine gemeinsame Schnittstelle beibehalten.
öffentliche Schnittstelle IUSERDAO {void Save ();}1.2 Proxy -Klasse, Zielobjekt
public class userDao implementiert IUSERDAO {@Override public void Save () {System.out.println ("----- Die Daten wurden gespeichert !!! -------"); }}1.3 Proxy -Objekte
öffentliche Klasse userDaoproxy implementiert iuserdao {// das Ziel des Zielobjekts privates iuserdao -Ziel; public userDaoproxy (iuserdao target) {this.target = target; } @Override public void Save () {System.out.println ("Start Transaktion ..."); target.save (); // Methode zur Ausführung des Zielobjektsystems system.out.println ("Transaktion übermitteln ..."); }}1.4 Testunterricht
public class App {public static void main (String [] args) {// Zielobjekt iuserdao target = new UserDao (); // Proxy iUserDao proxy = new UserDaoproxy (Ziel); Proxy.Save (); // Führen Sie die Proxy -Methode aus}} aus 2. Dynamischer Agent
2.1 In ähnlicher Weise muss dynamischer Proxy auch eine Schnittstelle vervollständigen. (Ähnlich wie oben)
2.2 Das Zielobjekt ist gleich.
2.3 In Proxy -Objekten ist es einfach anders
public class ProxyFactory {// ein Zielobjekt für private Objekte beibehalten; public proxyFactory (Objektziel) {this.target = target; } // ein Proxy -Objekt public Object GetProxyInstance () {return proxy.newproxyInstance (target.getClass (). GetClassloader (), target.getClass (). GetInterfaces (), New InvocationHandler () {@Override public -Object -Invape (Objekt -Proxy, methodi -methodisch), methodie (] methode (] methody, methode (] methody, methode (] methode (] methods (] methods, methodie (] methode (] methods (] methodien (]. Transaktion "); // Führen Sie das Zielobjektmethode -Objekt returnValue = method.invoke (Ziel, args); System.out.println (" Transaktion ") aus; return returnValue;}}); }}2.4 Testunterricht
public class App {public static void main (String [] args) {// Zielobjekt iuserdao target = new UserDao (); System.out.println (target.getClass ()); // Proxy -Objekt für das Zielobjekt iuserdao proxy = (iuserdao) neu proxyfaktorisch (Ziel) .getProxyInstance (); System.out.println (proxy.getClass ()); // Methode ausführen [Proxy -Objekt] proxy.save (); }} 3. Cglib Proxy
3.1Cglib Proxy muss die Schnittstelle nicht vervollständigen, sondern müssen nur die Klasse und die Proxy -Klasse schreiben, um proxyiert zu werden. Der Stellvertreter hier ist der gleiche wie 1.2, daher ist er nicht mehr geschrieben.
3.2 Die Proxy -Klasse ist anders. Wenn Sie den CGGLIB -Proxy -Modus verwenden, müssen Sie sich auf das Kern -Framework -Paket von Spring verweisen.
public class ProxyFactory implementiert MethodeInterceptor {// das Ziel des privaten Objekts für das Ziel des Ziels beibehalten. public proxyFactory (Objektziel) {this.target = target; } // Erstellen Sie ein Proxy -Objekt für das Zielobjekt öffentliches Objekt getProxyInstance () {// 1. Tool Class Enhancer en = New Enhancer (); // 2. Setzen Sie die übergeordnete Klasse en.setsuperClass (target.getClass ()); // 3. Setzen Sie die Rückruffunktion en.setCallback (this); // 4. Erstellen Sie eine Unterklasse (Proxy -Objekt) return en.create (); } @Override public Object Intercept (Object OBJ, Method -Methode, Objekt [] args, MethodProxy -Proxy) löst Throwable {System.out.println ("Start Transaction ...") aus; // Methode zum Ausführen von Zielobjektobjekten returnValue = methode.invoke (Ziel, args); System.out.println ("Transaktion senden ......"); return returnValue; }}3.3 Testklasse
public class App {public static void main (String [] args) {// Zielobjekt userDao target = new UserDao (); System.out.println (target.getClass ()); // Proxy -Objekt userDao proxy = (userDao) Neue Proxyfaktorie (Ziel) .getProxyInstance (); System.out.println (proxy.getClass ()); // Methode zur Ausführung von Proxy -Objekt -Proxy.Save (); }}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.