AspectJでは、Join Pointの指定にワイルドカードを用いることが出来ます。
例を挙げます。
任意(個数、型共)の引数を持ち、任意の戻り値を持つ全てのメソッドが対象となります。
つまり、全クラスの全メソッドが対象となります。
メソッド名が set のメソッドだけを対象とします。
メソッド名が set で始まるメソッドだけを対象とします。
同一パッケージ内Sample1クラスの全メソッドを対象とします。
引数の個数が「一つ」のメソッドだけを対象とします。
引数を取らないメソッドだけを対象とします。
全クラスのコンストラクタメソッドだけを対象とします。
全クラスのコンストラクタメソッド(int型の引数を一つ取るもの)だけを対象とします。
target(Point) && call(int *())
Pointクラスで定義されていて、かつ引数を取らず戻り値がint型の全メソッドを対象とします。
つまり、以下と同じです。
call(int Point.*())
通常、このキーワードはメソッドに引数を追加したい場合に使用します。
「target と args」を参考にして下さい。
call(* *(..)) && (within(Main))
呼び出し元を限定するには、within
キーワードを使います。
この場合、Mainクラスのメソッドから呼び出された全メソッドを対象とします。
「Mainクラスで定義された」ではありません。
例を挙げます。
public class Sample1 { public void func1() { ... } } public class Main { public void func1() { new Sample1().func1(); } } public class Sub { public void func1() { new Sample1().func1(); } }
この場合、Main.func1()から呼び出したSample1.func1()のみ対象となります。
Sub.func1()から呼び出したSample1.func1()は対象となりません。
call (* *(..)) && (withincode(* Main.func1(..)))
呼び出し元を、クラスではなくメソッド単位で限定する場合にはwithincode
キーワードを使います。
staticでない全てのメソッドを対象とします。
execution(public !static * *(..))
public属性で、staticでない全てのメソッドを対象とします。
インターフェイスMyInterfaceを実装したクラスの全メソッドを対象とします。