Impl アスペクト

最近忙しくってドキュメントを書くひまがない。ということでネタを忘れないようにメモっとく。詳しくはちゃんとしたドキュメントにまとめるけど・・・

AspectJ を使っていて、少なくとも3つのケースで Impl アスペクトみたいなインナーアスペクトを使いたい状況になることがある

  • interface に Inter-type declarationsしたいとき。つまり、多重継承っぽくしたいとき。
  • pertarget(or perthis) でアウター(外側)のアスペクトを宣言したとき。つまり、pertargetとかで宣言されたアスペクトは、その対象となるオブジェクトに関係しない advice は定義しても実行 されない ため。
  • あるアスペクト内で advice 実行の順序を制御したいとき。つまり、順序を制御したい advice をそれぞれ(or いくつかを) インナーアスペクトに移動して、declare precedence を指定。

ちゃんと覚えてないけど、ひとつのファイル内で、インナーアスペクトにしなくてもいくつもアスペクト宣言できるんだっけか?