▼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 件のコメント:
コメントを投稿