S2AopFactoryクラスのcreateメソッドを用いて、あるクラスの拡張クラスを生成し、アスペクトを織り込んだインスタンスを取得します。
S2AopFactory.create(component_class, aspects)
- 第1引数 : Aspect対象クラス
- 第2引数 : 織り込むAspectの配列
例として、次のようなサービスクラスにAspectを適用してみます。
module Example class Service def add(a, b) return a + b end end end
ServiceクラスのaddメソッドにTraceInterceptorをAspectします。
require 's2container' require 'seasar/aop/s2aop-factory' require 'seasar/aop/aspect' require 'seasar/aop/pointcut' require 'example' interceptor = Seasar::Aop::Interceptor::TraceInterceptor.new pointcut = Seasar::Aop::Pointcut.new(/^add$/) aspect = Seasar::Aop::Aspect.new(interceptor, pointcut) service = Seasar::Aop::S2AopFactory::create(Example::Service, [aspect]).new p service.add(2, 3)
Interceptor.
callメソッドを実装するクラスです。S2Aopでは、次のインターセプターがバンドルされています。
- Seasar::Aop::Interceptor::TraceInterceptor
トレース処理を「Crosscutting Concern」として扱うためのInterceptorです。Interceptorがどこに適用されるのかをあらわすクラスです。
Seasar::Aop::Pointcut.new(target)コンストラクタ引数のtargetには、Pointcutとなるメソッドを特定する正規表現、文字列、またはSymbolを渡します。
Aspect.
Interceptor(Advice)とPointcutを関連付けるクラスです。
Seasar::Aop::Aspect.new(interceptor, pointcut)コンストラクタ引数でInterceptorとPointcutを指定します。
NOTE この例は example/example09 にあります。
© Copyright The Seasar Foundation and the others 2008-2009, all rights reserved. |