第一次写,希望大神们呵呵即可。
最近在学习拦截器,没想到刚开始就碰到难题了。我明明配置好了拦截器,但是丝毫没有起作用,百思不得其解。
这是起初的配置:
<context:component-scan base-package="sin.cara.controller" /> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <ref bean="myInterceptor"/> </list> </property> </bean> <bean id="myInterceptor" class="sin.cara.interceptors.MyInterceptors"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views" /> <property name="suffix" value=".jsp" /> </bean>
这是修改后的配置:
<context:component-scan base-package="sin.cara.controller" /> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <ref bean="myInterceptor" /> </list> </property> </bean> <bean id="myInterceptor" class="sin.cara.interceptors.MyInterceptors"> </bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean>
细心的看官也许发现了不同之处,是的,少了
<mvc:annotation-driven />
居然可以成功拦截。
原因是因为
<mvc:annotation-driven />
会自动为我们注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 这两个bean。所以第一种配置无法注入 interceptors属性,就不能指定拦截器。
当使用这种配置时
<mvc:interceptors> <bean class="sin.cara.interceptors.MyInterceptors" /> </mvc:interceptors>
使不使用
<mvc:annotation-driven />
都没关系,都会成功拦截。还没弄明白这是为什么,希望OSCER们能帮我我解答。
Interceptor 与 <mvc:annotation-driven /> 的冲突
原文地址:http://my.oschina.net/u/782633/blog/348757