2017-03-14 2 views
0

J'ai essayé de définir un pointcut qui correspondrait à toutes les méthodes d'une classe, mais cela n'a pas fonctionné. J'ai essayé de trouver la raison. Et j'ai finalement trouvé le point de défaut de l'expression pointcut que j'ai définie.Que signifie deux astérisques consécutifs dans l'expression Pointcut?

Ce qui suit est le début de ce que j'ai défini en premier. (Ne fonctionne pas)

@Pointcut("execution(** membership.data.MemberRepository.*(..))") 

Comme je l'avais connu, les deux consécutifs astérisques dans « l'exécution (** » désigne tout modificateur d'accès et tout type de retour, mais il jamais égalée des méthodes qui a une sorte de types de retour comme ceci:

public List<MemberVO> findByName(String name) { ... 

d'autre part, il correspondait une autre comme ceci:

public String print(String str) { ... 

Et ce qui suit est le début des moyens appropriés de définir que je trouve sur ceux-ci correspondent. les deux méthodes ci-dessus et fonctionnent bien.

@Pointcut("execution(public * membership.data.MemberRepository.*(..))") 

@Pointcut("execution(* membership.data.MemberRepository.*(..))") 

Que manquais-je? J'ai essayé de trouver la réponse mais elle n'est jamais apparue. S'il vous plaît laissez-moi savoir la signification exacte de « l'exécution (** »

Addition:. La source complète de la classe d'aspect

@Aspect 
public class PerformanceLogger { 

    @Pointcut("execution(* membership.data.MemberRepository.*(..))") 
    public void performance() {} 

    @Around("performance()") 
    public Object watchPerformance(ProceedingJoinPoint jp) { 
     try { 
      long st = System.nanoTime(); 
      Object obj = jp.proceed(); 
      System.out.println(jp.toShortString() + " called :" + (System.nanoTime() - st)); 
      return obj; 
     } catch (Throwable e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 
+0

Peut-être un espace entre les deux '*'? – Andreas

+0

@Andreas J'ai essayé de mettre un espace entre les deux comme ceci: "exécution (* * .." et il a provoqué une exception lors de l'initialisation du bean aspect qui a l'expression pointcut – ParkCheolu

+0

Pourquoi ne partagez-vous pas et les signatures de méthodes? De cette façon, vous n'obtiendrez pas de réponses significatives.Veuillez apprendre [comment poser une question sur SO] (http://stackoverflow.com/help/how-to-ask) et fournir un [minimal, complete, and exemple vérifiable] (http://stackoverflow.com/help/mcve) Merci, Oh, et en passant: "**" n'a aucun sens, je peux déjà vous le dire. La partie que vous nous cachez – kriegaex

Répondre

0

Comme je l'ai dit dans mon commentaire: ** ne veut pas dire quoi que ce soit, vous Heureusement, l'analyseur semble l'interpréter comme étant équivalent à *, mais vous ne pouvez pas en être sûr, en fait cela devrait donner une erreur de syntaxe, donc s'il vous plait, ne l'utilisez pas, cela n'a pas de sens. pas de travail, c'est une syntaxe invalide, IMO ça devrait être corrigé dans le livre "Spring in Action", je l'ai aussi trouvé dans la documentation d'AspectJ. ething comme **. En ce qui concerne votre question: Pour obtenir toutes les exécutions de méthode pour la classe membership.data.MemberRepository, vous utilisez le point execution(* membership.data.MemberRepository.*(..)). Vous avez déjà découvert par vous-même.