2017-01-17 1 views
2

j'ai essayé l'expression de pointcut pour un paquet spécifique comme com.abc.def.controller, com.abc.def.service.serviceImpl, etc dans @Around conseils comme:Expression Pointcut pour des méthodes spécifiques dans différents paquets

@Around("execution(* com.abc.def.controller..*.*(..))") 
@Around("execution(* com.abc.def.service.*Impl.*(..))") 

Je dois aussi correspondre à des méthodes dans différents paquets comme com.abc.xyz.controller, com.abc.xyz.service.serviceImpl et essayé de nombreuses expressions pointues, mais n'a pas fonctionné.

Toute aide sera appréciée. :)

Répondre

1

Que dis-tu de ça?

@Around("execution(* com.abc..controller..*(..))") 
@Around("execution(* com.abc..service.*Impl.*(..))") 

Vous pouvez également correspondre à la fois à la fois comme ceci:

@Around(
    "execution(* com.abc..controller..*(..)) || " + 
    "execution(* com.abc..service.*Impl.*(..))" 
) 

D'autres variantes sont possibles, en fonction de ce que vous voulez atteindre exactement. N'hésitez pas à poser des questions de suivi connexes.

+0

Merci pour votre réponse. J'ai une question qui, je viens d'ajouter plus de déclaration dans l'expression du contrôleur comme, @Around ("exécution (* com.abc..controller .. * (..)) && @annotation (CustomAnnotation)"). Cela ne fonctionne pas. Ai-je manqué un code ou une confioguration nécessaire pour cela? – Abhishek

+0

Dans la syntaxe basée sur les annotations AspectJ, vous devez utiliser un nom de classe complet, tel que 'com.abc.blah.CustomAnnotation'. Dans la syntaxe native d'AspectJ, cela ne serait pas nécessaire. – kriegaex

+0

Voici mon interface d'annotation ... import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention (RetentionPolicy.RUNTIME) @Target ({ElementType.TYPE, ElementType.METHOD}) @interface publique CustomAnnotation { \t cordes methodName(); \t Type de chaîne(); } – Abhishek

0

Essayez ci-dessous pour la même expression,

@Around ("exécution (* com.abc.def.controller. *. * (..))")

+0

Il correspond uniquement aux méthodes du package com.abc.def. J'ai besoin à la fois de com.abc.def et de com.abc.xyz. J'essaie de le généraliser. – Abhishek

+0

Je n'ai pas essayé, mais vous pouvez @Around ("within (com.abc .. *)") –