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

Advice(MethodInterceptor)

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

Joinpoint(MethodInvocation)

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

Pointcut

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

Aspect

 AdviceとPointcutを関連付けます。

  • プログラム本来の目的(Core Concern)とプログラム本来の目的ではないもの(Crosscutting Concern) を分離することでメンテナンス性が向上します。
  • 業務ロジックからシステム的機能を「Crosscutting Concern」に排出した「Core Concern」は、シンプルなソースになります。 本来のやりたかったことだけが記述されます。
  • トランザクションの自動化など、従来エンタープライズアプリケーションの知識が必要であった処理が、 普通の.NETのオブジェクトで可能になります。
  • 設定をシンプルに行えます。
  • Interceptorを作成する場合に実装しなければならない.NETインターフェースが1つです。
  • コンポーネントにどんなアスペクトが適用されるのかが明確です。
  • 基本的なAspect実装オブジェクトパターンが用意されているため、すぐに使用することが可能です。 (独自にインターフェースや抽象クラスを実装することも可能)

 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を用いた実装には、以下の特徴・制限があります。

  • Aspectを適用するオブジェクトは透過プロキシになる
  • Aspectを適用する為には、Inteface型で受け取るか、System.MarshalByRefObjectの派生クラスでなければならない
  • thisポインタ(自身への参照)経由の場合はアスペクトは適用されない
  • コンポーネントのインスタンス生成時のパフォーマンスはSeasar.DynamicProxyによるAOPより良い
  • Aspectを適用するオブジェクトは、型が拡張される
  • Aspectを適用する為には、Inteface型で受け取るか、対象のメソッドがVirtualでなければならない
  • thisポインタ(自信への参照)経由でAspectを適用するためには、対象のメソッドがVirtualでなければならない
  • メソッド実行時のパフォーマンスは標準実装によるAOPより良い