Maison > Java > javaDidacticiel > 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
Libérer: 2023-05-13 08:37:05
avant
1310 Les gens l'ont consulté

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);  }
Copier après la connexion
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);      }   }
Copier après la connexion
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) {       }  }
Copier après la connexion
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", "张三");      }   }
Copier après la connexion
Classe client:

start-->>addUser() userId-->>0001 UserManagerImpl.addUser() userId-->>0001 success-->>addUser()
Copier après la connexion
Résultat d'exécution:

package com.bjpowernode.pattern;   public interface UserManager {             public String test(String userId);  }
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal