4.3. Aspect using S2AopFactory

By the create method of S2AopFactory class, the extended class of an aspect target class is generated and the instance which wove in the aspect is acquired.

S2AopFactory.create(component_class, aspects)
  • The 1st argument : Aspect target class
  • The 2nd argument : Array of Aspects woven in

As an example, an aspect is applied to the following Service class.

module Example
  class Service
    def add(a, b)
      return a + b

TraceInterceptor is aspected to add method of Service class as follws.

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 is a class which implements call method. These next interceptors are attached to S2Aop.

  • Seasar::Aop::Interceptor::TraceInterceptor
    TraceInterceptor is a interceptor for treating trace processing as "Crosscutting Concern".


Pointcut is a class showing where Interceptor is applied.


Regexp, String or Symbol which specify the method used as Pointcut is passed to a constructor argument.


Aspect is a class which associates Interceptor(Advice) and Pointcut.

Seasar::Aop::Aspect.new(interceptor, pointcut)

Interceptor and Pointcut are specified by a constructor argument.


This Example is located at "example/example09".

© Copyright The Seasar Foundation and the others 2008-2009, all rights reserved.