翻訳元サイト
Production Aspect Chapter 1. Getting Started with AspectJ
キーワード
- context passing 実行状況
- croscutting structure 横断的構造
本文概要
実行時の状況に応じた横断的構造は、Javaのプログラムが複雑化する重要な原因のソースコードになるでしょう。
AspectJでは、このような実行時状況の性質をモジュール化する方法で実装できます。
以下のColorControl.ajではafter adviceが、FigureクラスのファクトリメソッドがColorControllingClientクラスのメソッド上より呼び出された際に実行されるようになっています。
ColorControl.aj
pointcut ColorControl {
pointcut CCClientCflow(ColorControllingClient client):
cflow(call(* *(..)) && target(client));
pointcut make(): call(FigureElement Figure.make*(..));
after(ColorControllingClient c) returning (FigureElement fe):
make() && CCClientCflow(c){
fe.setColor(c.colorFor(fe));
}
}
このアスペクトが影響を及ぼすのは少ない数のメソッドのみになりますが、AOPを用いないでこの機能を実装した場合より多くのメソッドの編集が必要になると思われます。特に、クライアントからファクトリメソッドへの制御フロー内のすべてのメソッドが編集対象になるでしょう。