Maison  >  Article  >  Java  >  Exemple d'analyse d'un proxy dynamique dans le mécanisme de réflexion Java

Exemple d'analyse d'un proxy dynamique dans le mécanisme de réflexion Java

PHPz
PHPzavant
2023-05-13 08:37:051255parcourir

1. Modèle de proxy

Le modèle de proxy consiste à fournir un proxy pour d'autres objets afin de contrôler l'accès à cet objet. En fait, le mode proxy introduit un certain degré d’indirection lors de l’accès aux objets. Cette indirection peut être associée à diverses finalités.

Sa caractéristique est que la classe proxy et la classe délégué ont la même interface. La classe proxy est principalement responsable du prétraitement des messages pour la classe délégué, du filtrage des messages, de la transmission des messages à la classe délégué et du traitement ultérieur des messages. Il existe généralement une association entre une classe proxy et une classe déléguée. Un objet d'une classe proxy est associé à un objet d'une classe déléguée. L'objet de la classe proxy lui-même n'implémente pas réellement le service, mais en appelant les méthodes appropriées. de l’objet de la classe déléguée. Fournir des services spécifiques.

2. Classification

Les classes d'agents peuvent être divisées en deux types selon la période de création, les classes proxy statiques et les classes proxy dynamiques.

Classe proxy statique : Créée par des programmeurs ou générée automatiquement par des outils spécifiques, puis compilée. Avant l'exécution du programme, le fichier .class de la classe proxy existe déjà.

Classe proxy dynamique : créée dynamiquement à l'aide du mécanisme de réflexion lorsque le programme est en cours d'exécution.

3. :

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);  }
Proxy dynamique:

Classe d'interface métier:

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);      }   }
Classe d'implémentation d'interface métier:

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) {       }  }
Classe BusinessHandler:

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", "张三");      }   }
Classe client:

start-->>addUser() userId-->>0001 UserManagerImpl.addUser() userId-->>0001 success-->>addUser()
Résultat d'exécution:

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer