1. Première impression d'AOP
Tout d'abord, donnez une terminologie plus professionnelle (de Baidu) :
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一 维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利 用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效 率。
Donnons un exemple relativement facile à comprendre :
Pour comprendre la programmation des aspects, vous devez d'abord comprendre ce que sont les aspects. Utilisez un couteau pour diviser une pastèque en deux moitiés, et la coupe est la surface coupée ; lors de la cuisson, la marmite et la cuisinière travaillent ensemble pour terminer la cuisson, et la marmite et la cuisinière sont les surfaces coupées. Dans la conception de la couche Web, couche Web->couche passerelle->couche de service->couche de données, chaque couche est également un aspect. En programmation, il existe des aspects entre les objets, les méthodes et méthodes et les modules.
Lorsque nous effectuons habituellement des activités, nous vérifions généralement la validité de l'activité pour chaque interface (si elle démarre, si elle se termine, etc.), et si cette interface nécessite une connexion utilisateur.
Selon la logique normale, nous pouvons le faire.
Le problème est que autant d'interfaces qu'il y a, le nombre de copies de code est requis. Pour un « paresseux », c’est intolérable. OK, proposez une méthode publique, et chaque interface appellera cette interface. Il y a un peu une saveur de nouilles tranchées ici.
Il y a aussi un problème. Bien que je n'aie pas besoin de copier le code à chaque fois, chaque interface doit appeler cette méthode. Il y a donc la notion d'aspect, et j'injecte la méthode quelque part dans l'appel d'interface (point cut).
De cette façon, l'interface n'a qu'à se soucier de l'activité spécifique, et n'a pas besoin de prêter attention à d'autres logiques ou traitements qui ne relèvent pas de l'interface.
La case rouge est une programmation orientée aspect.
2. Concepts associés à l'AOP
Après avoir lu les exemples ci-dessus, je pense que tout le monde a déjà une idée approximative de l'AOP en tête, mais qu'en est-il de là Il y a quelques ambiguïtés dans des termes tels que les aspects mentionnés ci-dessus. Ensuite, expliquons les concepts associés dans l'AOP. Ce n'est qu'en comprenant les concepts de l'AOP que nous pourrons vraiment saisir l'essence de l'AOP.
Voici une définition plus professionnelle du concept :
Aspect : La déclaration d'aspect est similaire à une déclaration de classe en Java, et sera incluse dans Aspect avec quelques points de coupe et les conseils correspondants.
Point commun : représente un point clairement défini dans le programme, comprenant généralement les appels de méthode, l'accès aux membres de la classe et l'exécution de blocs de gestion des exceptions, etc. Il peut également imbriquer d'autres points communs.
Pointcut : Représente un ensemble de points communs. Ces points communs sont soit combinés via des relations logiques, soit concentrés via des caractères génériques, des expressions régulières, etc. Il définit le conseil correspondant là où cela se produit.
Conseil (amélioration) : Le conseil définit les opérations spécifiques à effectuer par les points du programme définis dans Pointcut. Il utilise avant, après et autour pour distinguer si le code est exécuté avant, après ou à la place de chaque point de joint. .
Cible : l'objet cible intégré dans Advice.
Tissage : Le processus de connexion d'Aspect à d'autres objets et de création d'un objet conseillé
Donnez ensuite un exemple facile à comprendre :
Après En lisant les connaissances théoriques ci-dessus, je crois que de nombreux amis ont encore l'impression que le concept d'AOP est encore vague et qu'ils ne comprennent pas complètement les différents concepts d'AOP. En fait, c'est normal, car les concepts d'AOP ne sont pas très clairs. . Il y a tellement de concepts qu'il m'a fallu beaucoup d'efforts pour les trier
Permettez-moi d'utiliser un exemple simple pour comparer la relation entre Aspect, Joint point, Pointcut et Advice dans AOP .
Supposons qu'il était une fois un petit comté appelé Java. Par une nuit sombre et orageuse, un meurtre a eu lieu dans ce comté, et il n'y avait heureusement rien à retracer sur les lieux. , Lao Wang, qui venait de rentrer d'à côté, a accidentellement découvert le processus de meurtre du meurtrier à ce moment-là. Cependant, comme il était tard et que le meurtrier était masqué, Lao Wang ne pouvait pas voir clairement le visage du meurtrier. le magistrat du comté de Java a donné un ordre aux soldats qui gardaient la porte : tout homme mesurant sept pieds cinq pouces doit être arrêté et interrogé. Bien sûr, les soldats n'ont pas osé désobéir à l'ordre du magistrat du comté, ils ont donc dû le faire. arrêter toutes les personnes qualifiées entrant et sortant de la villeJetons un coup d'œil à la nouvelle ci-dessus et à ce qu'est l'AOP sur la correspondance.
Tout d'abord, nous savons que dans Spring AOP, le point de joint fait référence au point d'exécution de toutes les méthodes, et le point de coupe est une information de description, qui modifie le point de joint, grâce à la coupe de point, nous pouvons déterminer quels points de joint peuvent. est tissé dans Conseils. Correspondant à l'exemple que nous avons donné ci-dessus, nous pouvons faire une analogie simple. Le point commun est équivalent aux habitants d'un petit comté de Java, et le point coupé est équivalent à l'accusation portée par Lao Wang, c'est-à-dire le. Le meurtrier est un homme mesurant environ sept pieds cinq pouces, et le conseil a été appliqué aux actions du suspect qui correspondent à la description de Lao Wang : arrêtez-le pour interrogatoire.
Pourquoi cette analogie est-elle utilisée. possible ?
Point commun : habitants d'un petit comté de Java : Parce que selon la définition, le point commun comprend tous les points candidats qui peuvent être intégrés dans Advice, tous les points d'exécution de méthode peuvent. être considéré comme des points communs. Et dans notre exemple ci-dessus, le meurtre a eu lieu dans un petit comté. Il va de soi que tout le monde dans ce comté peut être un suspect.
Pointcut : Homme, environ 7 pieds 5 pouces. tall : Nous savons que les conseils peuvent être intégrés à toutes les méthodes (points communs), mais nous ne voulons pas intégrer les conseils dans toutes les méthodes. Le rôle de Pointcut est de fournir un ensemble de règles pour faire correspondre les points de jointure et d'ajouter des conseils aux points de jointure. respecter les règles. De même, pour le magistrat du comté, aussi stupide soit-il, il sait toujours qu'il ne peut pas arrêter toutes les personnes du comté pour les interroger. Au lieu de cela, il devrait arrêter ceux qui remplissent les conditions sur la base du fait que. le meurtrier est un homme et mesure environ sept pieds cinq pouces. Ici, le meurtrier est un homme, et il mesure environ sept pieds cinq pouces. C'est un prédicat modificateur qui limite la portée du meurtrier. La règle de modification est suspecte et doit être arrêtée et interrogée
Conseil : Arrêter et interroger est une action, c'est-à-dire un morceau de code Java qui agit sur les points communs définis par point cut. . De la même manière, par rapport à notre exemple, l'action de saisir pour interrogatoire agit sur ceux qui satisfont les hommes, des habitants d'un petit chef-lieu de Java qui mesurent environ sept pieds cinq pouces.
Aspect : : L'aspect est une combinaison de points coupés et de conseils, nous pouvons donc ici faire une analogie : « D'après les indices de Lao Wang, tout Si un homme mesure sept pieds cinq pouces, il sera arrêté et interrogé dans son intégralité. l'action peut être considérée comme un aspect
Enfin, il existe un diagramme décrivant la relation entre ces concepts :
3. 🎜>Joinpoint dans AOP peut avoir de nombreux types : appel de méthode de constructeur, définition et acquisition de champs, appel de méthode, exécution de méthode, gestion et exécution d'exceptions, initialisation de classe. C'est-à-dire que dans le concept d'AOP, nous pouvons intégrer nos conseils personnalisés dans les points de jointure ci-dessus, mais tous les points de jointure ci-dessus ne sont pas implémentés dans Spring. Pour être précis, Spring ne prend en charge que les points de jointure de type d'exécution de méthode.
Type d'avis
avant le conseil, conseil exécuté avant le point de jointure. Bien qu'avant que le conseil soit exécuté avant le point de jointure, il ne peut pas empêcher l'exécution du point de jointure. sauf si une exception se produit (c'est-à-dire que dans le code de conseil avant, nous ne pouvons pas décider artificiellement s'il faut continuer à exécuter le code dans le point de jointure)
après le retour du conseil, exécuté après qu'un point de jointure renvoie normalement le conseilaprès avoir lancé un conseil, un conseilaprès un conseil (final) exécuté lorsqu'un point de jointure lève une exception, qu'un point de jointure se termine normalement ou qu'une exception se produise, il sera exécuté un conseil.
autour des conseils, conseils qui sont exécutés avant le point de jointure et après la sortie du point de jointure. C'est le conseil le plus couramment utilisé.introduction, l'introduction peut ajouter de nouveaux objets aux propriétés et méthodes des objets d'origine.
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!