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);
}
}
}
Peut-être un espace entre les deux '*'? – Andreas
@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
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