2025
01
18
2008
11
28
seasarについて
DI+AOPの軽量コンテナ
DIとは?
Dependency Injection(依存性注入)
DIを実現するメカニズムの概要は,オブジェクト相互の依存性をプログラム外部に記述して,実行時に結合することである。
依存性とは?
Java言語ではオブジェクトは「Javaクラス」として記述する。ここで,「A」というJavaクラスのソースコード中に,「B」を呼び出すコードが含 まれていたとしよう。このコードは,「AがBを生成し,そのメソッドを呼び出す」という内容になる。生成するためには,AはBを知っていなければならな い。つまり,Aを実行するには同時にBが必要となる。これが依存性である。
依存性の正体がオブジェクトの生成のコードであるならば,この「悪者」となっているコードを消せないか?
具体的には,Bを生成するコード(=依存性)を A本体に含めず,その実行時に動的に「注入」できないか?
この考え方が,依存性注入(Dependency Injection),すなわちDIなのである。
DIを実現するメカニズム
オブジェクトAがオブジェクトBに依存する部分を,Aのソースコードに直接記述するのではなく,間接的な方法で(メタレベルで)記述する。例えば Spring Frameworkの場合は,XML形式の設定ファイルに,AとBとの間の依存性を記述する。EJB3.0では,Java言語仕様に加わったメタデータに より,アノテーション(「@session」など,プログラム・コード中に挿入する付帯情報)として記述する。
AOPとは?
Aspect Oriented Programming:アスペクト指向プログラミング
横断的な関心事
たとえば、ログトレース。いろんなところでログトレースしたい。でもいろんなとこに書くのは無駄。
じゃAOPで、処理を分離する。横断的なロジックと関係無い処理は、アスペクトとして分割する。
静的なAOPと動的なAOP
静的なAOP:AspectJ
動的なAOP:Seasae2、Spring
バイトコードレベルでアスペクトを織り込むタイプ
クラスロード時や実行時にバイトコード変換を用いて、アスペクトを織り込むタイプのAOPです。Seasar2はバイトコードレベルでアスペクトを織り込むタイプです。
プロキシを利用してアスペクトを織り込むタイプ
Spring
Seasar2のAOPについて
Seasar2のAOPのAdvice
- Around Advice、Before Advice、After Advice、After Returning Advice
- それぞれ、Joinpointの前後・前・後に実行されるAdvice。これらは独自のAdviceとして実装する必要があります。
- Throw Advice
- Joinpointで例外が発生した場合に実行されるAdvice。Seasar2の提供するThrowsInterceptorを継承して実装する必要があります。
- その他のAdvice
- Joinpointに対する機能を実装済みのAdvice。Seasar2の提供するInterceptorをそのまま利用できます。
Plain Old Java Object
ごく普通のJavaオブジェクトであることを強調した名称。
Javaにおいてもっとも寿命が長いのは、どんなフレームワークでもない、POJOであろう。
それは「Javaである」ことしか要請しないのだから。POJOは中継層やプロセス層のような「うつろいゆくもの」に依存しない。
POJOはテストを容易にする。
2008/11/28 (Fri.) Trackback() Comment(0) seasar
Comments
Trackback
Trackback for this entry: