spring原拦截器配置与新命名空间mvc:interceptors配置拦截器对比与注意事项

来源:互联网 发布:知乎 代购 吐槽 编辑:程序博客网 时间:2024/05/22 05:04
原先,我们是这么配置拦截器的
   <bean id="openSessionInViewInterceptor"class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">      <property name="sessionFactory" ref="sessionFactory" />   </bean>     <beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">       <property name="interceptors">         <list>         <ref bean="openSessionInViewInterceptor"/>         <bean class="com.jumbo.interceptor.MetaInfoInterceptor"/>         </list>       </property>  </bean>

原配置方式结合新命名空间mvc:interceptors配置方式

<mvc:annotation-driven /> <!-- *************openSessionInViewInterceptor  *************-->   <bean id="openSessionInViewInterceptor"class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">      <property name="sessionFactory" ref="sessionFactory" />   </bean>     <!--      **************interceptors **************************   -->   <beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">      <property name="interceptors">        <list>           <ref bean="openSessionInViewInterceptor" />        </list>      </property>   </bean>    <mvc:interceptors>      <mvc:interceptor>        <mvc:mapping path="/**/*.htm" />        <bean id="metaInfoInterceptor" class="com.jumbo.web.interceptor.MetaInfoInterceptor"/>      </mvc:interceptor>   </mvc:interceptors>

这样对吗???

由于<mvc:annotation-driven  />会自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个实例,

<span style="color:#FF6666;"><beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></span>
这儿又注册一次导致导致没有openSessionInViewInterceptor,产生了no session 异常

所以:放弃原拦截器配置方式拥抱新的方法:

    <mvc:annotation-driven />       <mvc:interceptors>          <!--*************openSessionInViewInterceptor *************   -->          <bean id="openSessionInViewInterceptor"class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">            <property name="sessionFactory" ref="sessionFactory" />          </bean>                <mvc:interceptor>            <mvc:mapping path="/**/*.htm" />            <bean id="metaInfoInterceptor" class="com.jumbo.web.interceptor.MetaInfoInterceptor"/>          </mvc:interceptor>             </mvc:interceptors>  



0 0