如何在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/>人,而你自己的人将被忽略。

如果DefaultAnnotationHandlerMappingregister by的<mvc:annotation-driven/>行为类似于默认行为,那就更好了,即,如果显式声明的行为优先,但是那不是他们编写的方式。

我当前的偏好是根本不使用<mvc:annotation-driven/>,这太混乱了,与其他配置选项混合使用时也太不可预测了。它实际上并没有做任何特别复杂的事情,显式添加它为你所做的工作并不困难或冗长,并且最终结果更易于理解。

以上是 如何在Spring MVC 3.0中注册处理程序拦截器? 的全部内容, 来源链接: utcz.com/qa/408103.html

回到顶部