独自のインターセプターを追加してみる

適当なインターセプターを作る

SimpleTraceInterceptorをまるぱくり。

public class SimpleTraceInterceptorMMM extends AbstractInterceptor {

private static final long serialVersionUID = 1L;

private static final Logger logger = Logger
.getLogger(SimpleTraceInterceptorMMM.class);

public Object invoke(final MethodInvocation invocation) throws Throwable {
if (!logger.isDebugEnabled()) {
return invocation.proceed();
}
final StringBuffer buf = new StringBuffer(100);
buf.append(getTargetClass(invocation).getName());
buf.append("#");
buf.append(invocation.getMethod().getName());
logger.debug("BEGIN " + buf);
try {
return invocation.proceed();
} catch (Throwable t) {
buf.append(" Throwable:").append(t);
throw t;
} finally {
logger.debug("END " + buf);
}
}

}



InterceptorChainを定義

customizer.diconに以下のような感じで。

<component name="simpleTraceInterceptorMMM" class="jp.co.sample.aop.interceptor.SimpleTraceInterceptorMMM"/>

<component name="testChain" class="org.seasar.framework.aop.interceptors.InterceptorChain">
<initMethod name="add"><arg>simpleTraceInterceptorMMM</arg></initMethod>
<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
</component>



作成したInterceptorChainを追加する

<component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">

<initMethod name="addAspectCustomizer">
<arg>"testChain"</arg>
</initMethod>

<initMethod name="addAspectCustomizer">
<arg>"actionMessagesThrowsInterceptor"</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>
<component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>
<component class="org.seasar.struts.customizer.ActionCustomizer"/>
</arg>
</initMethod>
</component>



Actioinのメソッドが呼ばれると…

2008/10/29 13:13:32.156 DEBUG (TraceInterceptor:105) - END jp.co.sample.action.IndexAction#index() : index.jsp
2008/10/29 13:13:32.156 DEBUG (SimpleTraceInterceptorMMM:105) - END jp.co.sample.action.IndexAction#index

おぉ~、見事両方のインターセプターが呼ばれましたね!

0 コメント: