110 votes

Spring AOP : Quelle est la différence entre JoinPoint et PointCut ?

Je suis en train d'apprendre les concepts de la Programmation Orientée Aspect et de Spring AOP. Je n'arrive pas à comprendre la différence entre un Pointcut et un Joinpoint - les deux semblent être identiques pour moi. Un Pointcut est l'endroit où vous appliquez vos conseils et un Joinpoint est également un endroit où nous pouvons appliquer nos conseils. Alors quelle est la différence ?

Un exemple de raccourci ponctuel peut être :

@Pointcut("execution(* * getName()")

Quel peut être un exemple de Joinpoint ?

204voto

premraj Points 120

Joinpoint : Un point de jonction est un candidat point dans le Exécution du programme de l'application où un aspect peut être branché. Ce point peut être l'appel d'une méthode, la levée d'une exception ou même la modification d'un champ. Ce sont les points où le code de votre aspect peut être inséré dans le flux normal de votre application pour ajouter un nouveau comportement.

Conseil : Il s'agit d'un objet qui comprend des invocations d'API aux préoccupations générales du système représentant l'action à effectuer à un point de jonction spécifié par un point.

Un raccourci : Une coupe ponctuelle définit à quels points de jonction, les conseils associés doivent être appliqués. Les conseils peuvent être appliqués à n'importe quel point de jonction pris en charge par le cadre de la POA. Bien entendu, vous ne souhaitez pas appliquer tous vos aspects à tous les points de jonction possibles. Les coupes transversales vous permettent de spécifier où vous voulez que vos conseils soient appliqués. Souvent, vous spécifiez ces points de jonction en utilisant des noms de classe et de méthode explicites ou des expressions régulières qui définissent des modèles de noms de classe et de méthode correspondants. Certains frameworks de POA vous permettent de créer des raccourcis dynamiques qui déterminent si les conseils doivent être appliqués en fonction de décisions prises lors de l'exécution, telles que la valeur des paramètres de la méthode.

L'image suivante peut vous aider à comprendre Advice, PointCut, Joinpoints. enter image description here

Source :

Explication à l'aide de l'analogie du restaurant : Source par @Victor

Lorsque vous allez au restaurant, vous regardez un menu et vous voyez plusieurs options parmi lesquelles vous pouvez choisir. Vous pouvez commander un ou plusieurs des articles figurant sur le menu. Mais tant que vous ne les commandez pas réellement, ce ne sont que des "occasions de dîner". Une fois que vous passez la commande et que le serveur l'apporte à votre table, c'est un repas.

Les points de jonction sont des options du menu et les points d'accès sont des éléments que vous sélectionnez.

Un Joinpoint est une opportunité dans le code qui vous permet d'appliquer un aspect... juste une opportunité. Lorsque vous saisissez cette opportunité, sélectionnez un ou plusieurs Joinpoints et leur appliquez un aspect, vous obtenez un Pointcut.

Source : Wiki :

A Joinpoint est un point dans le flux de contrôle d'un programme où le flux de contrôle peut arriver par deux voies différentes (IMO : c'est pourquoi l'appel joint).

Conseils décrit une classe de fonctions qui modifient d'autres fonctions

A Pointcut est une correspondance P attern of Joinpoint, c'est-à-dire l'ensemble des points de jonction.

4 votes

Ceci devrait être marqué comme une réponse correcte. Pour ajouter quelques informations supplémentaires, regardez la réponse de Cragi Walls... coderanch.com/t/485525/Spring/Différence-Joint-Point-Coupé .

2 votes

To the point : Une coupe ponctuelle définit à quels points de jonction les conseils doivent être appliqués +1

0 votes

Juste pour confirmation, more Joinpoints and apply an aspect to them, you've got a Pointcut. aspect pour eux ou conseil pour eux ?

37voto

Sujay Mumbaraddi Points 356

Pour comprendre la différence entre un point de jonction et une coupe de points, pensez aux coupes de points comme spécifiant les règles de tissage et les points de jonction comme des situations satisfaisant ces règles.

Dans l'exemple ci-dessous,

  @Pointcut("execution(* * getName()")  

Le pointcut définit des règles selon lesquelles un conseil doit être appliqué à la méthode getName() présente dans n'importe quelle classe de n'importe quel paquet et les joinpoints seront une liste de toutes les méthodes getName() présentes dans les classes afin que le conseil puisse être appliqué à ces méthodes.

(Dans le cas de Spring, la règle sera appliquée sur les beans gérés uniquement et les conseils peuvent être appliqués aux méthodes publiques uniquement).

1 votes

"Le pointcut définit des règles disant que les conseils doivent être appliqués sur la méthode getName() présente dans n'importe quelle classe de n'importe quel paquet et les joinpoints seront une liste de toutes les méthodes getName() présentes dans les classes afin que les conseils puissent être appliqués sur ces méthodes." Je suis désolé mais cela devient de plus en plus confus. Pouvez-vous s'il vous plaît me donner une analogie dans un scénario réel de la vie quotidienne ?

35voto

Krishna Points 1602

JoinPoints : Il s'agit essentiellement d'endroits dans la logique métier réelle où vous souhaitez insérer une fonctionnalité diverse qui est nécessaire mais qui ne fait pas partie de la logique métier réelle. Quelques exemples de JoinPints sont : appel de méthode, méthode retournant normalement, méthode lançant une exception, instanciation d'un objet, référence à un objet, etc...

Raccourcis : Les coupures de point sont un peu comme des expressions régulières qui sont utilisées pour identifier les points de jonction. Les points de jonction sont exprimés à l'aide du "langage d'expression des points de jonction". Les coupes transversales sont des points du flux d'exécution où la préoccupation transversale doit être appliquée. Il existe une différence entre les points de jonction et les coupes transversales ; les points de jonction sont plus généraux et représentent tout flux de contrôle où nous "pouvons choisir" d'introduire une préoccupation transversale, tandis que les coupes transversales identifient les points de jonction où "nous voulons" introduire une préoccupation transversale.

3 votes

Point de jonction - endroits potentiels pour appliquer/exécuter le code de conseil. Pointcut - Points de jonction effectivement choisis pour exécuter le conseil.

14voto

kriegaex Points 6365

Comparaison d'un langage AOP comme AspectJ à un langage de requête de données comme SQL,

  • vous pouvez penser à points de jonction (c'est-à-dire tous les endroits de votre code où vous pouvez tisser du code d'aspect) comme une table de base de données avec de nombreuses lignes.
  • A pointcut est comme une formule SELECT qui peut sélectionner un sous-ensemble de lignes/points de jonction défini par l'utilisateur.
  • Le code réel que vous tissez dans ces endroits sélectionnés est appelé conseils .

8voto

mgroves Points 8550

Les deux concernent le "où" de la programmation orientée aspect.

Un point de jonction est un endroit individuel où vous pouvez exécuter du code avec AOP. Par exemple, "lorsqu'une méthode lève une exception".

Une coupe ponctuelle est une collection de points de jonction. Par exemple, "lorsqu'une méthode de la classe Foo lève une exception".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X