Le proxy est un modèle de conception qui fournit un autre moyen d'accéder à l'objet cible, c'est-à-dire d'accéder à l'objet cible via l'objet proxy. L'avantage est que des fonctions supplémentaires peuvent être améliorées en fonction de l'implémentation de l'objet cible. Opération, c'est-à-dire étendre la fonction de l'objet cible
Une idée en programmation est utilisée ici : ne pas modifier le code ou les méthodes que d'autres ont écrits. à volonté. Si Si elle doit être modifiée, cette méthode peut être étendue via un agent
Prenons un exemple pour illustrer le rôle d'un agent : Supposons que nous voulions inviter une star, alors nous ne nous connectons pas directement. à la star, mais contactez l'agent de la star, pour atteindre le même objectif. La star est un objet cible. Il lui suffit d'être responsable du programme lors de l'événement, et d'autres questions insignifiantes sont laissées à son agent (agent) pour résoudre. . Ceci est un exemple de pensée d'agence dans la réalité
Les points clés du mode proxy sont : l'objet proxy et l'objet cible L'objet proxy est une extension de l'objet cible et appellera l'objet cible
.Proxy statique
Lors de l'utilisation d'un proxy statique, vous devez définir une interface ou une classe parent L'objet proxy et l'objet proxy implémentent la même interface ou héritent du même parent.
Ce qui suit est un cas à expliquer :
Simulez l'action de sauvegarde, définissez une interface pour l'action de sauvegarde : IUserDao.java, puis l'objet cible implémente la méthode UserDao.java de cette interface. .À ce stade, si vous utilisez la méthode proxy statique, vous devez également implémenter l'interface IUserDao dans l'objet proxy (UserDaoProxy.java).Lors de l'appel, appelez l'objet cible en appelant la méthode de l'objet proxy.
A noter que l'objet proxy et l'objet cible doivent implémenter la même interface, puis appeler la méthode de l'objet cible en appelant la même méthode
Résumé du proxy statique :
1. Il peut étendre la fonction cible sans modifier la fonction de l'objet cible.
2 Inconvénients :
En raison du proxy, l'objet doit implémenter la même interface que l'objet cible, donc là. il y aura beaucoup de classes proxy, trop de classes. En même temps, une fois que l'interface ajoute des méthodes, l'objet cible et l'objet proxy doivent être conservés
Comment résoudre les défauts des proxys statiques Quoi ? est que vous pouvez utiliser un proxy dynamique
Le proxy dynamique
Le proxy dynamique a les caractéristiques suivantes :
1. l'interface doit être implémentée
2. La génération d'objets proxy consiste à utiliser l'API du JDK pour construire dynamiquement des objets proxy en mémoire (nous devons spécifier le type d'interface pour créer des objets proxy/objets cibles)
3 . Proxy dynamique Aussi appelé : proxy JDK, proxy d'interface
Résumé :
L'objet proxy n'a pas besoin d'implémenter l'interface, mais l'objet cible doit implémenter l'interface, sinon dynamique. le proxy ne peut pas être utilisé
Proxy Cglib
Les modes proxy statique et proxy dynamique ci-dessus nécessitent que l'objet cible soit un objet cible qui implémente une interface, mais parfois la cible L'objet n'est qu'un objet distinct et n'est pas implémenté. Pour n'importe quelle interface, vous pouvez utiliser une sous-classe de l'objet cible pour implémenter le proxy à ce moment-là. Cette méthode est appelée : Proxy Cglib
Procureur Cglib, également appelé. un proxy de sous-classe, est construit en mémoire Un objet de sous-classe pour étendre la fonction de l'objet cible
Le proxy dynamique du JDK a une limitation, c'est-à-dire que l'objet utilisant le proxy dynamique doit implémenter une ou plusieurs interfaces If. Si vous souhaitez proxy une classe qui n'implémente pas l'interface, vous pouvez utiliser Cglib pour y parvenir. Cglib est un package de génération de code puissant et performant qui peut étendre les classes Java et implémenter des interfaces Java au moment de l'exécution. Frameworks AOP, tels que Spring AOP et synaop, pour leur fournir La méthode sous-jacente d'interception (interception) du package Cglib consiste à convertir le bytecode et à générer de nouvelles classes en utilisant ASM, un petit framework de traitement de bytecode en bloc. L'utilisation directe d'ASM est déconseillée. car cela nécessite que vous compreniez la structure interne de la JVM. Le format et le jeu d'instructions comprenant le fichier de classe sont tous familiers
Méthode d'implémentation de l'agent de sous-classe Cglib :
1. de cglib doit être introduit, mais le package de base de Spring inclut déjà la fonction Cglib, vous pouvez donc introduire directement spring-core-3.2.5.jar.
2 Après avoir introduit le package de fonctions, vous pouvez construire dynamiquement. sous-classes en mémoire
3. La classe proxy ne peut pas être finale, sinon une erreur sera signalée
4. Si la méthode de l'objet cible est finale/statique, elle ne sera pas interceptée, c'est-à-dire les affaires supplémentaires les méthodes de l'objet cible ne seront pas exécutées
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!