(アスペクトのインスタンス化 != インスタンスレベルアドバイスウィービング) ???
ふむ。インスタンスレベルでアドバイスをウィービングしたい動機は、直感的にわかるけど、アスペクトをインスタンス化する動機は、何だろう? いや、アスペクトをインスタンス化してはいけない、という意味じゃなくて、なんか、こう、違和感を感じる。具体的には、どうしてかはわからないけど、感じる。
AspectJ では、アスペクトのインスタンス化は、基本的にはできない。なんで基本的に、って書いたかというと、実際にはできる方法があるから(バグかどうかは知らない)。privileged を使えば、インスタンス化は可能。
たとえば、CAESAR だと、deploy するときに、アスペクトをインスタンス化する
インスタンスレベルは(実際の構文はこんな感じじゃないらしいので注意)、
...
deploy( new MyAspect() ) {
// この中だけアスペクトが有効
}
...
...
deploy( new MyAspect() on targetObj) { // targetObj のみアドバイスが有効}
...
EOS だと(使ったことないからよくわからんけど)
とからしい。よくわからん。
public instancelevel aspect MyAspect {
}
話はちょっとかわって・・・AspectJ を使い始めた当初は、アスペクトのコードが、実際のコード内に現れることは、何か違和感を感じていた。
public class MyClass {
public void m() {
LoggingAspect.m(); // なにか
}
}
参考
- M. Mezini and K.Ostermann. Conquering Aspects with Caesar. the 2nd International Conference on Aspect-Oriented Software Development
http://www.st.informatik.tu-darmstadt.de/public/Publications.jsp
- M. Haupt, C. Bockisch, M. Mezini, K. Ostermann. Towards Aspect-Aware Execution Models. Technical Report TUD-ST-2003-01.
http://www.st.informatik.tu-darmstadt.de/public/Publications.jsp
- Hridesh Rajan and Kevin Sullivan. Need for Instance Level Aspect Language with Rich Pointcut Language
http://www.daimi.au.dk/~eernst/splat03/
- Hridesh Rajan and Kevin Sullivan. Eos: Instance-Level Aspects for Integrated System Design