Heim  >  Artikel  >  Java  >  Beispielanalyse eines dynamischen Proxys im Java-Reflexionsmechanismus

Beispielanalyse eines dynamischen Proxys im Java-Reflexionsmechanismus

PHPz
PHPznach vorne
2023-05-13 08:37:051298Durchsuche

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);  }
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);      }   }
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) {       }  }
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", "张三");      }   }
Client-Klasse:

start-->>addUser() userId-->>0001 UserManagerImpl.addUser() userId-->>0001 success-->>addUser()
Laufergebnis:

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen