ひがやすを技術ブログ

電通国際情報サービスのプログラマ

ダイコン時代のAOP - AOPフレームワーク

以前は、静的なアスペクト定義と動的なアスペクト定義という
ことで比較していたのですが、正確にいうと
AOPフレームワーク

  1. コンパイル時にクラスに対してアスペクトを適用する
  2. 実行時にクラスに対してアスペクトを適用する
  3. 実行時にインスタンス(コンポーネント)に対してアスペクトを適用する

の3タイプに分かれるんじゃないかと思ってます。
1はコンパイラもしくはポストプロセッサで処理するタイプが
多く、AspectJが代表選手でしょう。
2はClassLoaderで処理するタイプが多く、JBossAOPが(たぶん)代表選手。
3はダイコンで処理するタイプが多く、S2もここに含まれます。


クラスに対してアスペクトを適用することについての懸念は、
同一のクラスから生成したインスタンスにはすべて同じ
アスペクトが適用されてしまう点です。
インスタンスごとに別のアスペクトを適用したい場合もあるんじゃないかと。
この点を除いたメリデメはというと、

  • 1はコンパイル時がちょっとめんどくさいが、実行時に特別な環境を必要としない。
  • 2は実行時に特別な環境が必要だが、普通にnewしたオブジェクトにもアスペクトを適用できる。
  • 3は実行時に特別な環境を必要とし、インスタンスもダイコンから取得する必要がある。

という感じになるんじゃないかと思います。