Interceptor 与 <mvc:annotation-driven /> 的冲突

第一次写,希望大神们呵呵即可。


最近在学习拦截器,没想到刚开始就碰到难题了。我明明配置好了拦截器,但是丝毫没有起作用,百思不得其解。

这是起初的配置:

<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们能帮我我解答。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。