1. Première impression d'AOP
Tout d'abord, donnez un terme plus professionnel (de Baidu):
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方
式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个
热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑
的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高
了开发的效率。
Ensuite, nous donnons un exemple relativement facile à comprendre (de: Spring AOP ):
Pour comprendre la programmation des aspects, vous devez comprendre ce qu'est un aspect. Utilisez un couteau pour diviser une pastèque en deux morceaux, et la coupe correspond aux nouilles; pour la cuisson, la marmite et la cuisinière travaillent ensemble pour terminer la cuisson, et la casserole et la cuisinière sont les nouilles. Dans la conception au niveau du Web, couche Web -> couche passerelle -> couche service -> couche de données, chaque couche est également un aspect. En programmation, entre objet et objet, méthode et méthode, module et module sont tous des aspects.
Lorsque nous faisons généralement des activités, nous vérifions généralement la validité de chaque interface (si elle démarre, si elle se termine, etc.), et si cette interface nécessite la connexion d'un utilisateur.
Selon la logique normale, nous pouvons le faire.
Le problème avec cela est de savoir combien de copies de code sont nécessaires pour le nombre d'interfaces. Pour une "personne paresseuse", c'est intolérable. Ok, venez avec une méthode publique, chaque interface pour appeler cette interface. Ça sent les nouilles en tranches.
Il y a aussi un problème: même si je n'ai pas besoin de copier le code à chaque fois, je dois appeler cette méthode pour chaque interface. Il y a donc le concept d'aspect, j'injecte la méthode à un certain endroit de l'appel d'interface (pointcut).
De cette manière, l'interface n'a besoin que de se soucier de l'activité spécifique et n'a pas besoin de se soucier d'une autre logique ou d'un traitement qui n'est pas l'interface.
La boîte rouge est une programmation orientée aspect.
Deux concepts liés dans AOP
Après avoir vu l'exemple ci-dessus, je pense que tout le monde a une idée approximative de l'AOP en tête, mais il y a des ambiguïtés dans des termes tels que l'aspect mentionné ci-dessus. Ensuite, expliquons l'AOP associé. Concepts Ce n'est qu'en comprenant les concepts d'AOP que vous pouvez vraiment saisir l'essence de l'AOP.
Voici d'abord une définition de concept plus professionnelle :
Aspect
(Aspect): La déclaration d'aspect est similaire à la déclaration de classe en Java. Aspect contiendra un pointcut et des conseils correspondants.Joint point
(Point de connexion): Représente un point clairement défini dans le programme, comprenant généralement l'invocation de méthode, l'accès aux membres de la classe et l'exécution de blocs de gestionnaire d'exceptions, etc. Il peut également imbriquer d'autres points de jonction.Pointcut
(Point de contact): Représente un groupe de points communs, qui sont combinés via des relations logiques, ou rassemblés via des caractères génériques, des expressions régulières, etc. Il définit où les conseils correspondants se produiront.Advice
(Amélioration): le conseil définit lesPointcut
opérations spécifiques à effectuer aux points de programme définis . Il utilise avant, après et autour pour distinguer si c'est avant, après ou au lieu d'exécuter du code pour chaque point de jonction.Target
(Cible):Advice
La cible du tissage .Weaving
(Tissage): le processus deAspect
connexion avec d'autres objets et de créationAdvice
d'un objet
Donnez ensuite un exemple facile à comprendre :
Après avoir lu la partie théorique des connaissances ci-dessus, je crois que de nombreux amis auront encore le sentiment que le concept d'AOP est encore très vague et que la compréhension de divers concepts en AOP n'est pas très approfondie. En fait, c'est normal, car le concept en AOP est trop et j'étais le patron a également passé du mal à peigner clair.
maintenant , je prends un exemple simple pour décrire ce que l'AOP Aspect
, Joint point
, Pointcut
et Advice
la relation entre les deux.
disons, il y avait une fois un homme nommé Java Dans le petit chef-lieu, par une nuit sombre et venteuse pendant un mois, un meurtre a eu lieu dans ce chef-lieu. Le meurtrier était très rusé, et il ne restait plus d'indices précieux. Heureusement, le vieux Wang qui venait de rentrer d'à côté se trouvait ici. À ce moment-là, j'ai accidentellement découvert le processus du meurtrier, mais comme il était tard et que le meurtrier se couvrait le visage, Lao Wang n'a pas vu clairement le visage du meurtrier. Il savait seulement que le meurtrier était un homme mesurant environ sept pieds cinq pouces. Un comté du comté de Java. Selon la description de Lao Wang, Ling a donné un ordre aux soldats gardant la porte: Tous les hommes qui mesuraient sept pieds et cinq pouces doivent être arrêtés et interrogés. Bien sûr, les soldats n’ont pas osé violer l’ordre du magistrat du comté, ils ont donc dû obliger tous ceux qui entraient et sortaient de la ville à remplir les conditions. Les gens ont été arrêtés.
Pour nous faire regarder à la fin quelle est la correspondance entre la petite histoire ci-dessus et AOP.
Tout d'abord nous savons, dans Spring AOP Joint point
se référer à ce point d'exécution de toutes les méthodes, et le point cut est une information descriptive, il modifie est Joint point
, par En pointillé, nous pouvons déterminer ce qui Joint point
peut être tissé Advice
. Conformément à l'exemple que nous avons donné ci-dessus, nous pouvons faire une simple analogie, qui Joint point
équivaut aux habitants d'un petit comté de Java , ce qui pointcut
équivaut à l'accusation de Lao Wang , Autrement dit, le meurtrier était un homme mesurant environ sept pieds et cinq pouces , et Advice
il a été appliqué sur le suspect conformément aux actions décrites par Lao Wang: attrapez-le pour l'interroger .
Pourquoi peut-il être comparé ainsi?
-
Joint point
: Gens dans un petit comté de Java: Parce que par définition, ceJoint point
sont tous desAdvice
points candidats qui peuvent être tissés . Au printemps AOP, tous les points d'exécution de méthode peuvent être pris en compteJoint point
. 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
: Mâle, environ sept pieds cinq pouces de hauteur: nous savons que toutes les méthodes (points de jonction) peuvent être tisséesAdvice
, mais nous ne voulons pas tisser dans toutes les méthodesAdvice
, maisPointcut
la fonction est de fournir un ensemble de règles correspondant au point de jonction, Ajoutez le point de jonction qui respecte les règles.DeAdvice
la même manière, pour le magistrat du comté, aussi faible soit-il, il sait aussi que toutes les personnes du comté ne peuvent pas être arrêtées pour interrogatoire, mais sur la base du meurtrier est un homme, mesurant environ sept pieds et cinq pouces. La personne qui remplit les conditions est arrêtée. Ici, le meurtrier est un homme. La hauteur d'environ sept pieds et cinq pouces est un prédicat modificateur. Cela limite la portée du meurtrier. Les personnes qui satisfont à cette règle de modification sont toutes des suspects et doivent être arrêtées pour interrogatoire. -
Advice
: Saisir et interrogerAdvice
est une action, c'est-à-dire un morceau de code Java qui agit sur ceux définis par le point cutJoint point
. De même, contrairement à notre exemple, saisir et interroger cette action consiste à affecter ces Rencontrez les hommes, les habitants de la petite ville du comté de Java, mesurant environ sept pieds cinq pouces. -
Aspect
:: C'est une combinaisonAspect
de coupure ponctuelle etAdvice
, donc ici, nous pouvons faire une analogie: "Selon les indices de Lao Wang, tous les hommes qui mesurent 7 pieds 5 pouces doivent être attrapés et interrogés." Toute cette action peut être considérée comme uneAspect
.
Enfin, un diagramme décrivant la relation entre ces concepts :
Trois, un autre contenu
AOP
Il Joinpoint
peut y avoir de nombreux types dans: appel de constructeur, définition et acquisition de champ, appel de méthode, exécution de méthode, exécution de gestion des exceptions, initialisation de classe. C'est-à-dire que dans AOP
le concept de ce qui précède, nous pouvons Joinpoint
tisser notre coutume sur ce qui précède Advice
, mais Spring
il n'implémente pas tout ce qui précède joinpoint
, pour être précis, Spring
ne prend en charge que le type d'exécution de méthode Joinpoint
.
Types de conseils
-
before advice
, Le conseil qui est 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éterminer artificiellement si Continuez à exécuter le code dans le point de jointure) -
after return advice
, Conseil exécuté après le retour normal d'un point de jointure after throwing advice
, Conseil exécuté après qu'un point de jointure lève une exceptionafter(final) advice
Indépendamment du fait qu'un point de jointure se termine normalement ou qu'une exception se produit, le conseil sera exécuté.around advice
, Le conseil qui est exécuté avant le point de jonction et après la sortie du point de jonction. Il s'agit du conseil le plus couramment utilisé.introduction
, Introduction peut ajouter de nouvelles propriétés et méthodes à l'objet d'origine.
En Spring
, il est réalisé grâce à une technologie de proxy dynamique et de bytecode dynamique AOP
. Nous expliquerons ces contenus plus tard.