Annotation + Aspect

先日の JavaWorld でちょろっと出た話なのですが、アノテーションの効果的な使い方だとおもったのが、アスペクト差込対象をアノテーションによって指定するというものがあります。

AspectJ を使用した開発が明らかにはやっていない原因の一つとして、AspectJ を使用した場合にどこにアスペクトが差し込まれるのかが把握しきれないというのがあると思います。
そこで、アノテーションによってクラスやメソッドに印しを付加することで、その印しを目印にアスペクトを差し込むことができます。この機能は AspectJ5 でサポートされているようです。

以下、例。たしかこんな感じ。
アスペクト

public aspect Transaction {
  before() : call( @transaction * *.*(...) ) {
    // トランザクション開始処理
  }
}

サービス

public class MoeServiceImpl implements MoeService {
  @transaction
  public List getMoeAttributeList() {
     // 萌え属性一覧の取得
  }
}

これによって、アスペクトの差込対象を明確に(それでいて、個別にではなく、複数同時に)指定できるため、いままで想定していない箇所にアスペクトが差し込まれてしまわないかと((((;゜Д゜)))ガクガクブルブルしていたことに、悩まされないで済むようになります。
この手法がひろまれば、AspectJ もようやく普及しやすくなるかもしれません。