Maison > Article > interface Web > Comprendre les compétences en programmation orientée aspect (AOP)_javascript
Lors de l'écriture du code de traitement de logique métier traditionnel, nous effectuons généralement plusieurs choses : la journalisation, le contrôle des transactions, le contrôle des autorisations, etc., puis nous écrivons le code de traitement de logique métier de base. Lorsque j'ai fini d'écrire le code et que j'ai regardé en arrière, je n'ai pas pu m'empêcher de constater que parmi les centaines de lignes de code de Yangyangshasha, seules quelques lignes étaient réellement utilisées pour le traitement de la logique métier de base, comme le montre la figure 6-4. Méthode après méthode, cours après cours, tant d’années se sont écoulées dans l’impuissance et le regret. Ce n'est pas grave, mais si à la fin du projet, il est soudainement décidé que des changements majeurs sont nécessaires dans le contrôle des autorisations, des milliers de méthodes devront "visiter" une par une, et la douleur sera "pire".
Si tous les codes communs dans les nombreuses méthodes de la figure 6-4 peuvent être extraits, placés quelque part pour une gestion centralisée, et que le conteneur peut ensuite intégrer dynamiquement ces codes communs les uns aux autres pendant une exécution spécifique, au moins deux problèmes peuvent être résolus. :
Lors de l'écriture de méthodes de traitement de logique métier spécifiques, les programmeurs Java EE doivent uniquement se soucier du traitement de base de la logique métier, ce qui non seulement améliore l'efficacité du travail, mais rend également les modifications de code simples et élégantes.
Dans la maintenance future, étant donné que le code logique métier et le code commun sont stockés séparément et que le code commun est stocké de manière centralisée, le travail de maintenance devient simple et facile.
La technologie AOP de programmation orientée aspect est née pour résoudre ce problème. L'aspect est une section transversale, comme le montre la figure 6-5, qui représente une fonction commune omniprésente, telle que l'aspect journal, l'aspect autorisation et l'aspect attente de transaction. .
Prenons le processus de mise en œuvre AOP du composant de logique métier de gestion des utilisateurs UserService (voir Figure 6-6) comme exemple pour analyser en profondeur le principe de mise en œuvre de la technologie AOP. La technologie AOP est basée sur le mécanisme de réflexion et le mécanisme de proxy dynamique du langage Java. Lorsque le composant de logique métier est en cours d'exécution, le conteneur AOP créera dynamiquement un objet proxy que l'utilisateur pourra appeler. Cet objet proxy a réussi à couper l'aspect du point de connexion de la méthode cible selon l'intention du programmeur Java EE, donc. que la fonction de l'aspect est cohérente avec le point de connexion de la méthode cible. Les fonctions de la logique métier sont exécutées simultanément. En principe, ce que l'appelant appelle directement est en fait l'objet proxy généré dynamiquement par le conteneur AOP, puis l'objet proxy appelle l'objet cible pour terminer le traitement de logique métier d'origine, et l'objet proxy a des aspects et des méthodes de logique métier synthétisés.
Maintenant, certains concepts impliqués dans la figure 6-6 sont expliqués comme suit.
Aspect : En fait, c'est la réalisation de fonctions communes. Tels que les aspects de journal, les aspects d'autorisation, les aspects de transaction, etc. Dans les applications réelles, il s'agit généralement d'une classe Java ordinaire qui stocke l'implémentation de fonctions communes. La raison pour laquelle elle peut être reconnue comme un aspect par le conteneur AOP est spécifiée dans la configuration.
Conseil : C'est la mise en œuvre spécifique des aspects. En prenant la méthode cible comme point de référence, selon différents lieux de placement, elle peut être divisée en cinq types : pré-notification (Avant), post-notification (AfterReturning), notification d'exception (AfterThrowing), notification finale (Après) et environnante. notification (Autour). Dans les applications réelles, il s'agit généralement d'une méthode de la classe aspect. Le type spécifique de notification est également spécifié dans la configuration.
Joinpoint : C'est l'endroit où les aspects peuvent être insérés pendant le processus d'exécution du programme. Par exemple, l'invocation de méthode, le lancement d'exceptions ou la modification de champ, etc., mais Spring ne prend en charge que les points de connexion au niveau de la méthode.
Pointcut : utilisé pour définir les points de connexion dans lesquels la notification doit couper. Différentes notifications doivent généralement être découpées en différents points de connexion. Cette correspondance précise est définie par l'expression régulière du point d'entrée.
Cible : ce sont les objets qui sont sur le point d'entrer dans l'aspect, c'est-à-dire les objets qui sont notifiés. Seul le code logique métier propre est laissé dans ces objets, et tous les codes de fonction courants attendent que le conteneur AOP soit intégré.
Objet proxy (Proxy) : un objet créé dynamiquement après l'application de notifications à l'objet cible. On peut simplement comprendre que la fonction de l'objet proxy est égale à la fonction de logique métier de base de l'objet cible plus la fonction commune. L'objet proxy est transparent pour l'utilisateur et est un produit du processus en cours d'exécution du programme.
Tissage : processus d'application d'aspects à l'objet cible pour créer un nouvel objet proxy. Ce processus peut se produire pendant la période de compilation, la période de chargement des classes et pendant l'exécution. Bien entendu, différents points d'occurrence ont des conditions préalables différentes. Par exemple, si cela se produit lors de la compilation, cela nécessite un compilateur spécial qui prend en charge cette implémentation AOP ; si cela se produit lors du chargement de la classe, cela nécessite un chargeur de classe spécial qui prend en charge l'implémentation AOP ; Mécanisme de réflexion du langage Java et mécanisme de proxy dynamique pour réaliser une implémentation dynamique.
Ce qui suit est un supplément :
AOP est l'abréviation de Aspect Oriented Programming, ce qui signifie : Programmation orientée aspect, une technologie qui permet une maintenance unifiée des fonctions du programme grâce à la précompilation et aux agents dynamiques d'exécution.
AOP et OOP sont deux idées de conception pour des domaines différents.
La POO (Programmation Orientée Objet) encapsule de manière abstraite les entités et leurs attributs et comportements du processus de traitement métier pour obtenir une division plus claire et plus efficace des unités logiques.
AOP extrait des aspects du processus de traitement métier. Il traite une certaine étape ou étape du processus de traitement pour obtenir l'effet d'isolation d'un faible couplage entre les différentes parties du processus logique.
Nous pouvons comprendre AOP et OOP simplement à partir du sens littéral ci-dessus, et il n'est pas exagéré d'utiliser la compréhension suivante :
La POO est en fait une encapsulation des propriétés et des comportements des objets, et l'AOP ne peut pas en parler. Cependant, l'AOP traite certaines étapes et étapes, et en extrait des aspects, s'il y a plusieurs ou plusieurs processus logiques. s'il y a des comportements opérationnels répétés, AOP peut les extraire et utiliser des agents dynamiques pour réaliser une maintenance unifiée des fonctions du programme. Cela peut être trop implicite. S'il s'agit de jugement d'autorisation, de journalisation, etc., cela peut être compris. Si nous utilisons simplement la POO, qu’en est-il du jugement d’autorisation ? Ajouter un jugement d'autorisation avant chaque opération ? Qu'en est-il de la journalisation ? Ajouter manuellement des journaux au début, à la fin et aux exceptions de chaque méthode ? Par conséquent, si vous utilisez AOP pour effectuer ces opérations répétées à l'aide d'un proxy, vous pouvez réduire le couplage entre les différentes parties du processus logique. Les deux se complètent mutuellement et se complètent.
Apprenons-en davantage sur quelques concepts AOP :
•Aspect : La modularisation d'une préoccupation. La mise en œuvre de cette préoccupation peut également traverser plusieurs objets. La gestion des transactions est un bon exemple de préoccupation transversale dans les applications J2EE. Les aspects sont implémentés à l'aide du Advisor ou de l'intercepteur de Spring.
•Joinpoint : un point clair dans l'exécution d'un programme, tel qu'un appel de méthode ou une exception spécifique levée.
•Notification (Conseil) : à un point de connexion spécifique, l'action effectuée par le framework AOP. Différents types de notifications incluent les notifications « autour », « avant » et « jette ». Les types de notifications sont décrits ci-dessous. De nombreux frameworks AOP, dont Spring, utilisent des intercepteurs comme modèles de notification et maintiennent une chaîne d'intercepteurs « autour » du point de connexion.
•Pointcut : Spécifie une collection de points de connexion où une notification sera déclenchée. Le framework AOP doit permettre aux développeurs de spécifier des points d'entrée, par exemple à l'aide d'expressions régulières.
•Introduction : ajoutez des méthodes ou des champs à la classe notifiée. Spring permet l'introduction de nouvelles interfaces pour tout objet conseillé. Par exemple, vous pouvez utiliser une importation pour que n'importe quel objet implémente l'interface IsModified afin de simplifier la mise en cache.
• Objet cible : l'objet contenant le point de connexion, également appelé objet notifié ou mandaté.
•AOP Proxy : un objet créé par le framework AOP, y compris les notifications. Au Spring, le proxy AOP peut être un proxy dynamique JDK ou un proxy CGLIB.
•Tissage : Assemblage d'aspects pour créer un objet conseillé. Cela peut être fait au moment de la compilation (par exemple en utilisant le compilateur AspectJ) ou au moment de l'exécution. Spring, comme d'autres frameworks Java AOP purs, termine le tissage au moment de l'exécution.
Le proxy AOP de Spring est généré et géré par le conteneur IoC de Spring, et ses dépendances sont également gérées par le conteneur IoC. Quant à la manière dont l'AOP de Spring est implémenté dans le projet, le prochain blog utilisera la journalisation comme exemple pour apprendre.