如何在Spring MVC 3.0中注册处理程序拦截器?
应该很容易:
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="myInterceptor" />
</list>
</property>
</bean>
但是这样就不会调用拦截器
回答:
默认情况下,Spring将注册BeanNameUrlHandlerMapping
,和DefaultAnnotationHandlerMapping
,而无需任何显式配置。
如果你定义自己的HandlerMappingbean
,那么默认的bean将不会被注册,而你只会得到显式声明的bean。
到现在为止还挺好。
当你添加<mvc:annotation-driven/>
到混合中时,问题就来了。这也声明了自己的DefaultAnnotationHandlerMapping
,它取代了默认值。但是,如果你还声明自己的一个,那么最终你将得到两个。由于按声明顺序进行查询,因此通常意味着首先注册的<mvc:annotation-driven/>
人,而你自己的人将被忽略。
如果DefaultAnnotationHandlerMapping
register by的<mvc:annotation-driven/>
行为类似于默认行为,那就更好了,即,如果显式声明的行为优先,但是那不是他们编写的方式。
我当前的偏好是根本不使用<mvc:annotation-driven/>
,这太混乱了,与其他配置选项混合使用时也太不可预测了。它实际上并没有做任何特别复杂的事情,显式添加它为你所做的工作并不困难或冗长,并且最终结果更易于理解。
以上是 如何在Spring MVC 3.0中注册处理程序拦截器? 的全部内容, 来源链接: utcz.com/qa/408103.html