2009年12月16日水曜日

AspectJ : 派生した場合の優先順位

抽象アスペクトを extends して派生アスペクトを定義し、両方で同じ pointcut に advice したらどうなるか。以下のようなコードで試してみた。
package p3;

public class App {
   public static void main(String[] args) {
      new Foo().foo();
   }
}
class Foo {
   void foo() { System.out.println("foo"); }
}
abstract aspect AspectX {
   abstract pointcut p();
   before(): p() {System.out.println("before x.p");}
   after(): p() {System.out.println("after x.p");}
}
aspect AspectY extends AspectX {
   pointcut p() : execution(void p3.Foo.foo());
   before(): p() {System.out.println("before y.p");}
   after(): p() {System.out.println("after y.p");}
}
こんな出力になった(色分けは分かりやすくするため)。規定クラスが内側になるらしい。
before y.p
before x.p
foo
after x.p
after y.p

0 件のコメント:

コメントを投稿