liguofeng29’s blog

個人勉強用ブログだっす。

S2AOP - 独自Interceptor

 独自にInterceptorを作成する場合は、次のインターフェースまたは、抽象クラスを実装します。 

org.aopalliance.intercept.MethodInterceptor
org.seasar.framework.aop.interceptors.AbstractInterceptor
 
app.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
<components>
  <component name="myInterceptor" class="MyInterceptor" />
 
  <component name="testMyInterceptor" class="TestMyInterceptor">
    <aspect pointcut="getMessage">myInterceptor</aspect>
  </component>
</components>

MyInterceptor.java
import org.aopalliance.intercept.MethodInvocation;
import org.seasar.framework.aop.interceptors.AbstractInterceptor;
 
// 独自AOP
public class MyInterceptor extends AbstractInterceptor{
 
    private static final long serialVersionUID = 1L;
 
    @Override
    public Object invoke(MethodInvocation arg0) throws Throwable {
        System.out.println("befor method call");

        // ターゲットメソッド実行
        Object ret = arg0.proceed();
        System.out.println("after method call");
        return ret;
    }
}

TestMyInterceptor.java
public class TestMyInterceptor {
 
    public void getMessage() {
        System.out.println("独自AOPテストメソッドが呼ばれました。");
    }
}
 
 
TestAopMain.java
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
 
public class TestAopMain {
    public static void main(String[] args) {
        // S2Container初期化
        SingletonS2ContainerFactory.init();
        // コンポーネント取得
        TestMyInterceptor t = SingletonS2Container.getComponent(TestMyInterceptor.class);
 
        t.getMessage();
 
        // S2Container破棄
        SingletonS2ContainerFactory.destroy();
    }
}
 
出力メッセージ
befor method call
独自AOPテストメソッドが呼ばれました。
after method call