昨年の11月に『アスペクト指向言語(Aspect & AspectJ)』として紹介した、アスペクト指向ですが、最近雑誌やオープンソースライブラリ内に度々見受けられるようになりました。先月ご紹介したSeasarにもAOP技術が組み込まれています。
今回は、「Javassist」を簡単にご紹介しておきます。
Javassistとは幅広く利用されているJBossアプリケーション・サーバーに付属の、アスペクト指向プログラミング機能の基本となるバイトコード操作ライブラリーとして発表されました。(JBoss:無償JavaAPサーバー)
Javassistは、東京工業大学 情報理工学研究科の千葉 滋助教授によって発案され、近年、新しいアスペクト指向プログラミング機能の追加基盤となるopen source JBoss application serverプロジェクトに加わりました。
同氏が研究のため開発したコード変換ツールjavassistがJBossのサブ・プロジェクトとなったことから、同氏はJBoss開発コミュニティのメンバーとなられています。(JBossのコミッターということですね!)具体的にjavassistは、JBossの次期版である4.Xの新機能POJO(通常のJavaクラスをEJBに自動変換する機能)やアスペクト指向プログラミングのベースとして使用されています。(RelaxerやSeasar等、日本発というキーワードに胸が高鳴るのは私だけでしょうか。)
Javassistは、Javaバイナリクラスを検査、編集、作成させます。検査の特徴は主にリフレクションAPIを通してJavaで直接利用可能なものを複製しますが、実際にクラスを、単に実行するのではなく修正している場合、この情報にアクセスする代替方法を持っており有用です。つまり、JVMに関しての精通した知識がなくてもAPIを通してJavaクラスのバイトコードに手を出せることになります。
アスペクト指向についての、現場への導入とそのメリットについては以前の記事でもご紹介しましたが、ロギングや各メソッド単位でのパフォーマンス測定等、横槍な操作によって、これらの処理が既存アプリケーションに対して、結合度が低く、且つ切り離された処理として操作・追加をすることが可能です。
ここでは実際の実装ロジックや専門用語を用いた紹介は割愛させて頂いていますので、もっとつっこんで!というつっこみを頂きそうですが、少々簡単に説明するというのが難しいことをご理解下さい。Javassistに関わらずAOPに関しては、最近WEBページも多数検索にひっかかるようになってきましたし、下記参考URL・雑誌にもとりあげられていますので、是非参照してみてください。
■Javassist Home Page
http://www.csg.is.titech.ac.jp/~chiba/javassist/
■Javassist API
http://www.csg.is.titech.ac.jp/~chiba/javassist/html/
■Javassist メモ(サンプルコード有り)
http://www.ncfreak.com/asato/doc/javassist.html
■Javaプログラミングのダイナミックス 第4回: Javassistでのクラス変換
http://www-6.ibm.com/jp/developerworks/java/040206/j_j-dyn0916.html