在Seasar2的系统中,给我们提供了不少的拦截器,但是实际上,这些系统提供的拦截器,我们自己用的,比较少,但是S2Dao中的
org.seasar.dao.pager.PagerS2DaoInterceptorWrapper
,这个拦截器,用得还是比较多的
Dao包的拦截器
配置一个拦截器链,这个dao.interceptor,表示的是调用源码包下(s2-dao-1.0.50.jar)的dao.dicon配置下面的interceptor组建
<!-- DAO Interceptor Chain -->
<component name="daoChain" class="org.seasar.framework.aop.interceptors.InterceptorChain">
<!-- 调用dao.dicon下的interceport拦截器, -->
<initMethod name="add"><arg>dao.interceptor</arg></initMethod>
</component>
dao.dicon配置文件
简单来说,我们最终织入到Dao的拦截器是org.seasar.dao.pager.PagerS2DaoInterceptorWrapper
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd">
<components namespace="dao">
<include path="j2ee.dicon"/>
<component class="org.seasar.dao.impl.AnnotationReaderFactoryImpl"/>
<component class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
<component name="interceptor" class="org.seasar.dao.pager.PagerS2DaoInterceptorWrapper">
<arg>
<component class="org.seasar.dao.interceptors.S2DaoInterceptor"/>
</arg>
</component>
<component class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
<component name="stringClobType">
@org.seasar.dao.types.ValueTypes@CLOB
</component>
<component class="org.seasar.dao.impl.BeanMetaDataFactoryImpl"/>
<component class="org.seasar.dao.impl.DaoNamingConventionImpl"/>
<component class="org.seasar.dao.impl.NullBeanEnhancer"/>
<component class="org.seasar.dao.impl.ResultSetHandlerFactorySelector"/>
<component class="org.seasar.dao.impl.DtoMetaDataFactoryImpl"/>
<component class="org.seasar.dao.impl.PropertyTypeFactoryBuilderImpl"/>
<component class="org.seasar.dao.impl.RelationPropertyTypeFactoryBuilderImpl"/>
<component class="org.seasar.dao.impl.DefaultTableNaming"/>
<component class="org.seasar.dao.impl.DefaultColumnNaming"/>
<component class="org.seasar.dao.impl.ProcedureMetaDataFactoryImpl"/>
</components>
织入拦截器
自动织入到Dao的配置中
Seasar2的Dao比较的简单,而且操作基本上就是一个接口加上SQL语句,就完成了Dao包的配置
<!-- ==================================================================== -->
<!-- Aspect Auto Register -->
<!-- ==================================================================== -->
<!-- S2Dao Interceptor Auto Register -->
<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">daoChain</property>
<initMethod name="addClassPattern" >
<arg>"com.yellowcong.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
系统环境下的拦截器
s2-framework-2.4.12的目录下,有一个aop.dicon配置文件,里面写了一堆的aop
aop.xml配置文件
这个配置文件里面,也是一堆的aop,不过我们需要简单了解一下,各个aop的作用就行了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasar.org/dtd/components.dtd">
<components namespace="aop">
<component name="traceInterceptor" class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>
<component name="classLoaderAwareTraceInterceptor" class="org.seasar.framework.aop.interceptors.ClassLoaderAwareTraceInterceptor"/>
<component name="simpleTraceInterceptor" class="org.seasar.framework.aop.interceptors.SimpleTraceInterceptor"/>
<component name="syncInterceptor" class="org.seasar.framework.aop.interceptors.SyncInterceptor"/>
<component name="traceThrowsInterceptor" class="org.seasar.framework.aop.interceptors.TraceThrowsInterceptor"/>
<component name="lifecycleAdapter" class="org.seasar.framework.aop.interceptors.InterceptorLifecycleAdapter"/>
<component name="toStringInterceptor" class="org.seasar.framework.aop.interceptors.ToStringInterceptor"/>
<component name="removeSessionInterceptor" instance="prototype" class="org.seasar.framework.aop.interceptors.RemoveSessionInterceptor"/>
<component name="propertyInterType" class="org.seasar.framework.aop.intertype.PropertyInterType">
<property name="trace">true</property>
</component>
</components>