クラス内のすべてのメソッドと一致するポイントカットを定義しようとしましたが、機能しませんでした。 私はなぜその理由が分かりましたか。 そして私は最終的に私が定義したポイントカット式の障害点を発見しました。ポイントカット式の2つのアスタリスクは何を意味しますか?
以下は、私が最初に定義したものの始まりです。私は、連続した2つのアスタリスクを知っていたように、「**(実行」任意のアクセス修飾子と任意の戻り値の型を意味するが、それは、戻り値の型のいくつかの種類を持っているいくつかのメソッドにマッチしたことはありませんで
@Pointcut("execution(** membership.data.MemberRepository.*(..))")
を(動作しません)このように:一方
public List<MemberVO> findByName(String name) { ...
、それはこのように、別の一致:
public String print(String str) { ...
、次は私が見つけたそれを定義する適切な方法の初めであるこれらのマッチ。上記の2つのメソッドシグネチャとうまく動作します。
@Pointcut("execution(public * membership.data.MemberRepository.*(..))")
@Pointcut("execution(* membership.data.MemberRepository.*(..))")
私には何が欠けていましたか?私は答えを見つけようと努力したが、決して現れなかった。 私は「実行(**」の正確な意味を教えてください
追加:アスペクトクラスの完全なソース
@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);
}
}
}
おそらく2つの '*'の間にスペースがありますか? – Andreas
@Andreas私は、このように2つの間にスペースを入れようとしました: "実行(* * .."とポイントカット式を持つアスペクトビーンを初期化している間に例外が発生しました – ParkCheolu
なぜ完全なポイントカットを共有しませんか?メソッドのシグネチャを使用すると、意味のある回答は得られません。[SOの質問方法](http://stackoverflow.com/help/how-to-ask)を参照し、[最小、完全、およびああ、ちなみに: '**'は全く意味がありません。私はすでにあなたに伝えています。あなたの問題は以下の通りです。 – kriegaex