2010年9月7日火曜日

「Javaフレームワーク開発入門」を読んで3




▼AOPのプロダクト比較

・AOPのウィービング(インターセプタ組み込み)のタイミングはプロダクトによって違う
     
  • AspectJ     Compile-time weaving, load-time weaving
  •  
  • Seasar2     run-time weavng
  •  
  • SamuraiAOP  load-time weaving


・ウィービングのタイミングによる考慮点
  • Compile-time weaving
  •  ・コンパイルするときにソースコードが必要なため、jarファイルのようなモジュールに対してはAOPの適用が難しい  ・コードを変更するたびに特殊なコンパイルが必要
  • run-time weaving
  • ・特定のAPIに依存する   Seasar2の場合だとS2コンテナから取得したオブジェクトしかAOPがかからない   S2Container、S2ContainerFactory等に依存 ・クラスが大量に生成される(permanent領域が足りなくなる可能性も)
  • load-time weaving
  • ・VMオプションが必要→GAEのようなVMオプションを設定できない環境は厳しい


・言語の違い
     
  • AspectJ     Java, AspectJ言語
  •  
  • Seasar2     Java, XML
  •  
  • SamuraiAOP  Java, XML


・ポイントカット指定の違い
     
  • AspectJ     アスペクトに定義
  •  
  • Seasar2     diconに定義
  •  
  • SamuraiAOP  XMLに定義


・ジョインポイントの違い
                                                                                                                                                                                                                                                                                                   
プロダクトインスタンスメソッドprivateメソッドstaticメソッドfinalメソッドコンストラクタフィールドアクセス
AspectJ
Seasar2×××××
SamuraiAOP×



それぞれメリット・ディメリットがありますが、設定のしやすさ/学習コストは
Seasar2→SamuraiAOP→AspectJ、機能面ではAspectJ→SamuraiAOP→Seasar2という印象。
実際のプロジェクトではSeasar2のAOPしか使ったことないですが、
privateにAOPをかけることはほとんどなかったので特に困らなかったです。
DIコンテナを使用する場合は、それに付属するAOP機能を使用するのが無難な気がします。


・AOPの標準化使仕様

AOP Alliance(AOP共通アーキテクチャの作成/標準化団体)を利用しているプロダクト

(org.aopalliance.interceptパッケージ)

 Seasar2, Spring, Guice, SamuraiAOP


javaEEを利用しているプロダクト

(javax.interceptorパッケージ)

 EJB3, Seam, SamuraiAOP

0 件のコメント:

コメントを投稿