Aspectual Reflection or Aspect-Oriented Reflection

ちょっとタイトルは大げさだけど、、、


もし、アドバイスにメソッドと同じように名前を付けられたら?


public aspect MyAspect {
before myBefore() {
...
}
}
メソッドがリフレクションを通して、Method として取得できるのと同様に

public class MyClass {
public void method() {
Advice advice = MyAspect.aspect.getAdvice("myBefore");
}
}
みたいな?


もしこれができるとすると、一つの利点は、アドバイス単位でそのアドバイスを実行するかどうかを指定できるかもしれない点:


public class MyClass {

public void method() {

Advice advice = MyAspect.aspect.getAdvice("myBefore");
advice.setActive(false); // アドバイスをオフに
// or advice.deactivate()
}
}

ポイントカットについては、すでに名前を付けれるので:


public aspect MyAspect {
pointcut myPc() : ...
}

public class MyClass {

public void method() {

Pointcut pc = MyAspect.aspect.getPointcut("myPc");
}
}

Inter-type declarations については名前がないので無理。無理やり名前をつけるとすると:

public aspect MyAspect {
declare parents myDec : MyClass implements MyInterface;
}

public class MyClass {

public void method() {

Declaration dec = MyAspect.aspect.getDeclaration("myDec");
}
}

また、クラスが Class であるようにアスペクトについても:

public aspect MyAspect { }

public class MyClass {

public void method() {

Aspect aspect = MyAspect.aspect;
}
}

ちょっとリフレクションとは関係ないけど、Class には Object が対応する。では、Aspect については? Aspect は Class? Aspect は Object? CrossCut とかかな、、、

参考:
アドバイスに名前を付けるというアイデアについては:

Erik Ernst and David H. Lorenz
Aspects and Polymorphism in AspectJ
AOSD 2003

DL: http://www.ccs.neu.edu/home/lorenz/papers/aosd2003polyspect/


Aspectual Reflection という名前については:

Sergei Kojarski, Karl Lieberherr, David H. Lorenz, and Robert Hirschfeld
Aspectual Reflection
In Proceedings of the AOSD 2003 Workshop on Software-engineering Properties of Languages for Aspect Technologies

DL: http://www.ccs.neu.edu/home/lorenz/papers/splat03/
僕のヤツは、単に、アドバイスをメソッドと同じようにクラスのメンバの一つだと見なしたときの、リフレクションの雰囲気の話。