Aspectual Reflection or Aspect-Oriented Reflection
ちょっとタイトルは大げさだけど、、、
もし、アドバイスにメソッドと同じように名前を付けられたら?
メソッドがリフレクションを通して、Method として取得できるのと同様に
public aspect MyAspect {
before myBefore() {
...
}
}
みたいな?
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() : ...
}
Inter-type declarations については名前がないので無理。無理やり名前をつけるとすると:
public class MyClass {public void method() {
Pointcut pc = MyAspect.aspect.getPointcut("myPc");
}
}
public aspect MyAspect {
declare parents myDec : MyClass implements MyInterface;
}
また、クラスが Class であるようにアスペクトについても:
public class MyClass {public void method() {
Declaration dec = MyAspect.aspect.getDeclaration("myDec");
}
}
public aspect MyAspect { }
ちょっとリフレクションとは関係ないけど、Class には Object が対応する。では、Aspect については? Aspect は Class? Aspect は Object? CrossCut とかかな、、、
public class MyClass {public void method() {
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/
僕のヤツは、単に、アドバイスをメソッドと同じようにクラスのメンバの一つだと見なしたときの、リフレクションの雰囲気の話。