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

时间:2021-11-10 08:43:38

原先,我们是这么配置拦截器的

   <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>