首页 > 其他分享 ><mvc:annotation-driven>和DefaultAnnotationHandlerMapping

<mvc:annotation-driven>和DefaultAnnotationHandlerMapping

时间:2023-08-29 18:37:50浏览次数:45  
标签:两遍 启动 配置 DefaultAnnotationHandlerMapping controller openSessionInViewInterceptor


spring配置拦截器有两种方式:

 


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

 

如果以上两种方式结合配置,可能会出现问题。

原因为:DefaultAnnotationHandlerMapping 被启动了两遍,controller 被Mapped了两遍。

mvc:annotation-driven 会自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个实例,

这个时候启动的 DefaultAnnotationHandlerMapping,openSessionInViewInterceptor没有起作用,仅在我再次配置的 DefaultAnnotationHandlerMapping才起了作用

而controller 的代码,恰恰是使用了 第一次启动的 DefaultAnnotationHandlerMapping ,导致没有openSessionInViewInterceptor,产生了no session的 异常

 


标签:两遍,启动,配置,DefaultAnnotationHandlerMapping,controller,openSessionInViewInterceptor
From: https://blog.51cto.com/u_16240770/7278967

相关文章