TOP
>
比較データ
> AOPの仕組み
DIxAOPコンテナ「Seasar2とSpring」
第5回:AOPとは何か
著者:
豆蔵 長谷川 裕一、竹端 進
2005/12/16
前のページ
1
2
3
4
AOPの仕組み
現在、Javaに対応したAOPフレームワークは、Seasar2やSpringのほかにも多く存在しています。今回はSeasar2とSpringを中心にAOPフレームワークの特徴を解説していきます。
静的なAOPと動的なAOP
AOPには大きく分けて、「静的にWavingを行うAOP(静的なAOP)」と「動的なWavingを行うAOP(動的なAOP)」があります。
静的なAOPを実現するプロダクトとして有名なものに、AspectJがあります。
静的なAOPとは、アスペクトを適用するためにコンパイル処理が必要となるものをいいます。したがって、アスペクトの動的な追加/削除(アプリケーションのホット・デプロイ)が行えません。
静的なAOPは、アスペクトを追加/削除するためにプログラムを停止する必要があるため、特にJ2EEアプリケーションの開発では不便なことがあります。そこで最近では、この点を考慮しコンパイルなど特別な手順が必要ない動的なAOPが登場してきています。Seasae2もSpringも、この動的なAOPの部類に入り、アスペクトを適用するために特別な言語を憶える必要やコンパイルを必要としません。
バイトコードとプロキシ
動的なAOPも、アスペクトをどのように織り込むかによって、大きく2つのタイプに分類することができます。1つはクラスのロード時や実行時にバイトコードのレベルでアスペクトを織り込むというものです。もう1つは、プロキシを利用したインターセプタ(注2)により、プログラム実行時にアスペクトを織り込むというものです。
※注2:
メソッド、フィールド、コンストラクタ内などでメッセージを"傍受"し、特定の処理を割り込ませるためのもの。
バイトコードレベルでアスペクトを織り込むタイプ
クラスロード時や実行時にバイトコード変換を用いて、アスペクトを織り込むタイプのAOPです。Seasar2はバイトコードレベルでアスペクトを織り込むタイプです。
プロキシを利用してアスペクトを織り込むタイプ
さて次に、プロキシを利用したアスペクトを織り込むタイプのAOPを説明します。
プロキシを利用するAOPでは、プロキシを利用したインターセプタが、メソッドの呼び出しを傍受して処理を挿入することによって、プログラムの実行時にアスペクトを織り込みます。
SpringはこのタイプのAOPを提供します。
プロキシベースのAOPフレームワークに共通していえることですが、プロキシを利用した単純なJavaプログラムで構成されるため、バイトコード変換や言語拡張によるアスペクトの織り込みを行うAOPフレームワークと比べて、フィールドにアスペクトが適用できない点や、アスペクトを適用するオブジェクトはすべてプロキシを通す必要があるため、粒度の細かいオブジェクトにアスペクトを適用する場合にパフォーマンスの面で優れていないなど、残念ながら劣る部分があります。
ただプロキシベースのAOPフレームワークにおいても、トランザクション管理/オブジェクトプール/セキュリティなど、AOPで実現される大部分の機能は行えます。またWebアプリケーションで考えた場合、1回のセッションで適用されるアスペクトはトランザクション程度だと思います。
そう考えれば、プロキシベースのAOPを利用することによってパフォーマンスが大きく劣ってしまうことは考えづらいです。もちろん、1回のセッションでトレースログをアスペクトとして何千回も動かすのであればプロキシベースのAOPではパフォーマンスを大きく落とすことになりますが、通常そのようなことはありえないでしょう。
さて、次回からはいよいよサンプルアプリケーションを利用して、Seasar2のAOPの利用方法ついて詳しく説明します。具体的にはトレースログと例外処理をアスペクトとし、ソースコードから排除することです。ご期待ください。
サンプルアプリケーションの導入
AOPによる処理を加えたサンプルアプリケーション「従業員管理Webアプリケーション」のSeasar2版とSpring版を用意しました。AOPをSeasar2とSpringでどのように利用するかの解説は次回以降になりますが、サンプルアプリケーションをインストールしてその動作を確認してください。
まずは、以下のURLからSeasar2版もしくはSpring版のサンプルアプリケーションを適当な場所にダウンロードしてください。
Seasar2版
sample_apli2_seasar2.zip
(ZIPファイル/3.80MB)
Spring版
sample_apli2_spring.zip
(ZIPファイル/5.35MB)
その後、ダウンロードしたファイルを解凍しEclipseのプロジェクトに追加してください。その他、インストール手順やプログラムの確認方法は本連載の第2回を参照してください。
前のページ
1
2
3
4
著者プロフィール
株式会社豆蔵 長谷川 裕一
XMLの技術開発やCORBA、EJBを使用したシステム開発などを経て、現在はアジャイル開発プロセスの導入から工学的なソフトウエアプロセスの策定、オープンソースプロダクトに関するコンサルタント、アーキテクトとして常に第一線で活躍。共著として「プログラムの育てかた 現場で使えるリファクタリング(ソフトバンク)」、「Spring入門(技術評論社)」。
著者プロフィール
株式会社豆蔵 竹端 進
鉄鋼系SIerを経て現職に。現在はオープンソースプロダクトに関するコンサティング、開発支援、教育を行うチームに所属。日々、新たな技術をどのように生かしていくかを考える毎日。現在の注目対象はSeasar2とMaven。
INDEX
第5回:AOPとは何か
アスペクト指向プログラミング(AOP:Aspect Oriented Programming)とは
AOPの適用範囲
Adviceの種類
AOPの仕組み