Heim > Java > javaLernprogramm > Hauptteil

Beispielanalyse eines dynamischen Proxys im Java-Reflexionsmechanismus

PHPz
Freigeben: 2023-05-13 08:37:05
nach vorne
1307 Leute haben es durchsucht

1. Proxy-Muster

Das Proxy-Muster dient dazu, einen Proxy für andere Objekte bereitzustellen, um den Zugriff auf dieses Objekt zu steuern. Tatsächlich führt der Proxy-Modus ein gewisses Maß an Indirektion beim Zugriff auf Objekte ein. Diese Indirektion kann mit verschiedenen Zwecken verbunden sein.

Ihre Besonderheit besteht darin, 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, das Filtern von Nachrichten, das Weiterleiten von Nachrichten an die Delegate-Klasse und die anschließende Verarbeitung von Nachrichten verantwortlich. Normalerweise besteht eine Assoziation zwischen einer Proxy-Klasse und einer Delegate-Klasse. Das Objekt der Proxy-Klasse selbst implementiert den Dienst nicht, sondern durch den Aufruf der entsprechenden Methoden des Objekts der Delegate-Klasse bestimmte Dienste bereitstellen.

2. Klassifizierung

Agentenklassen können je nach Erstellungszeitraum in zwei Typen unterteilt werden: statische Proxy-Klassen und dynamische Proxy-Klassen.

Statische Proxy-Klasse: Von Programmierern erstellt oder automatisch von bestimmten Tools generiert und dann kompiliert. Bevor das Programm ausgeführt wird, ist die .class-Datei der Proxy-Klasse bereits vorhanden.

Dynamische Proxy-Klasse: Wird dynamisch mithilfe des Reflexionsmechanismus erstellt, wenn das Programm ausgeführt wird.

3. Beispiele für statischen Proxy und dynamischen Proxy. Statischer Proxy: :

package com.bjpowernode.pattern;   public interface UserManager {       public void addUser(String userId, String userName);            public void delUser(String userId);            public void modifyUser(String userId, String userName);            public String findUser(String userId);  }
Nach dem Login kopieren
Dynamischer Proxy:

Geschäftsschnittstellenklasse:

package com.bjpowernode.pattern;   public class UserManagerImpl implements UserManager {       public void addUser(String userId, String userName) {          //System.out.println("start-->>addUser() userId-->>" + userId);          try {              System.out.println("UserManagerImpl.addUser() userId-->>" + userId);                            //System.out.println("success-->>addUser()");          }catch(Exception e) {              e.printStackTrace();              //System.out.println("error-->>addUser()");              throw new RuntimeException();          }         }       public void delUser(String userId) {          System.out.println("UserManagerImpl.delUser() userId-->>" + userId);      }       public String findUser(String userId) {          System.out.println("UserManagerImpl.findUser() userId-->>" + userId);          return "张三";      }       public void modifyUser(String userId, String userName) {          System.out.println("UserManagerImpl.modifyUser() userId-->>" + userId);      }   }
Nach dem Login kopieren
Geschäftsschnittstellen-Implementierungsklasse:

package com.bjpowernode.pattern;   public class UserManagerImplProxy implements UserManager {       private UserManager userManager;            public UserManagerImplProxy(UserManager userManager) {          this.userManager = userManager;      }            public void addUser(String userId, String userName) {          try {              System.out.println("start-->>addUser() userId-->>" + userId);              userManager.addUser(userId, userName);              System.out.println("success-->>addUser()");          }catch(Exception e) {              e.printStackTrace();              System.out.println("error-->>addUser()");          }         }       public void delUser(String userId) {       }       public String findUser(String userId) {          return null;      }       public void modifyUser(String userId, String userName) {       }  }
Nach dem Login kopieren
BusinessHandler-Klasse:

package com.bjpowernode.pattern;   public class Client {       /**       * @param args       */     public static void main(String[] args) {          //UserManager userManager = new UserManagerImpl();          UserManager userManager = new UserManagerImplProxy(new UserManagerImpl());          userManager.addUser("0001", "张三");      }   }
Nach dem Login kopieren
Client-Klasse:

start-->>addUser() userId-->>0001 UserManagerImpl.addUser() userId-->>0001 success-->>addUser()
Nach dem Login kopieren
Laufergebnis:

package com.bjpowernode.pattern;   public interface UserManager {             public String test(String userId);  }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBeispielanalyse eines dynamischen Proxys im Java-Reflexionsmechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage