2017-04-06 12 views
0

特定のメソッドの実行に関するaround adviceを呼び出すポイントカットを作成しました。AspectJポイントカットマッチングパターン

しかし、私が使用した最終パターンがなぜ機能するのかを正確に理解したいと思いますが、最初のパターンは理解できませんでした。

(動作しませんでした)私が使用した初期パターンました:

pointcut timeIt() : execution(* *.AuthFilter.filter(..)); 

作品パターンは次のとおりです。

*.*..*.間の差が証明しているGoogleにしようと
pointcut timeIt() : execution(* *..*.AuthFilter.filter(..)); 

やや難しい。誰かが説明を提供したり、その違いを説明するリソースを提供できれば、私は非常に感謝しています。

答えて

2

それは文書によって説明される:

AspectJ Type Patterns

識別子に*埋め込まれた任意の文字列に一致するが、パッケージ(または内側型) 一致しないセパレータ」。 "

識別子の埋め込み..は、パッケージ(または内部型)の区切り文字 "。"で始まり、終わる文字列 に一致します。

基本的に、パッケージレベルで使用される場合、..はすべてのサブパッケージを意味します。

あなたの最初の式はAuthFilterが第2レベルであれば、例えば、一致しorg.AuthFilterが、それはorg.security.AuthFilterと一致しません、この場合には、あなたは*.*.AuthFilterが必要になります。

2番目の式は、一致する場合はどこでもAuthFilterです。それはそれがであるパッケージとサブパッケージは関係ありません。ところで

@AspectJ cheat sheet

+1

、これはまた、あなたが '* .. *。AuthFilter'を必要としないことを意味しますが、' * .. AuthFilter'は十分です。 – kriegaex

+0

ありがとう、それはすばらしい説明です。リンクに感謝します – James