Seasarプロジェクト ＞ Seasar.NETプロジェクト ＞ S2Container.NET ＞ AOP ＞ S2AOP.NET 概要

S2Container.NETのAOP機能のことをS2AOP.NETと呼びます。 AOPとは、Aspect Oriented Programming（アスペクト指向プログラミング）の略です。 プログラム本来の目的とは異なる処理を内部に埋め込まず、外から織り込むように作ることです。

# 目次

上へ

- AOPを考える上でキーとなる概念
- AOPのメリット
- S2AOP.NETのメリット
- Seasar.DynamicProxyによるAOP
- 標準実装によるAOPの特徴・制限
- Seasar.DynamicProxyによるAOPの特徴・制限

# AOPを考える上でキーとなる概念

上へ

## Advice(MethodInterceptor)

プログラム中に挿入されるコードを表します。Interceptorと呼ばれることもあります。

## Joinpoint(MethodInvocation)

対象となるクラスとAdviceを結合するポイントを表します。AdviceはJoinpointから引数やメソッドの情報を取得することができます。

## Pointcut

どこにJoinpointを設定するのかを定義します。

## Aspect

AdviceとPointcutを関連付けます。

# AOPのメリット

上へ

- プログラム本来の目的（Core Concern）とプログラム本来の目的ではないもの（Crosscutting Concern） を分離することでメンテナンス性が向上します。
- 業務ロジックからシステム的機能を「Crosscutting Concern」に排出した「Core Concern」は、シンプルなソースになります。 本来のやりたかったことだけが記述されます。
- トランザクションの自動化など、従来エンタープライズアプリケーションの知識が必要であった処理が、 普通の.NETのオブジェクトで可能になります。

# S2AOP.NETのメリット

上へ

- 設定をシンプルに行えます。
- Interceptorを作成する場合に実装しなければならない.NETインターフェースが1つです。
- コンポーネントにどんなアスペクトが適用されるのかが明確です。
- 基本的なAspect実装オブジェクトパターンが用意されているため、すぐに使用することが可能です。 (独自にインターフェースや抽象クラスを実装することも可能)

# Seasar.DynamicProxyによるAOP

上へ

S2AOP.NETは標準でSystem.Runtime.Remoting.Proxies.RealProxyを用いて実装されていますが、 これをCastle.DynamicProxyを用いたSeasar.DynamicProxyに差し替えることができます。(1.2.0 for .NET 2.0以降) Seasar.DynamicProxyのセットアップについては以下のドキュメントを参照して下さい。

セットアップ - Seasar.DynamicProxyのセットアップ

標準のSystem.Runtime.Remoting.Proxies.RealProxyを用いた実装と、 Seasar.DynamicProxyを用いた実装には、以下の特徴・制限があります。

# 標準実装によるAOPの特徴・制限

上へ

- Aspectを適用するオブジェクトは透過プロキシになる
- Aspectを適用する為には、Inteface型で受け取るか、System.MarshalByRefObjectの派生クラスでなければならない
- thisポインタ(自身への参照)経由の場合はアスペクトは適用されない
- コンポーネントのインスタンス生成時のパフォーマンスはSeasar.DynamicProxyによるAOPより良い

# Seasar.DynamicProxyによるAOPの特徴・制限

上へ

- Aspectを適用するオブジェクトは、型が拡張される
- Aspectを適用する為には、Inteface型で受け取るか、対象のメソッドがVirtualでなければならない
- thisポインタ(自信への参照)経由でAspectを適用するためには、対象のメソッドがVirtualでなければならない
- メソッド実行時のパフォーマンスは標準実装によるAOPより良い

© Copyright The Seasar Project and the others 2004-2009, all rights reserved.