Interceptor 攔截器 與 的衝突



最近在學習攔截器,沒想到剛開始就碰到難題了。我明明配置好了攔截器,但是絲毫沒有起作用,百思不得其解。

這是起初的配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<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>

這是修改後的配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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>

細心的看官也許發現了不同之處,是的,少了

?
1
<mvc:annotation-driven />

居然可以成功攔截。

原因是因爲

?
1
<mvc:annotation-driven />

會自動爲我們註冊DefaultAnnotationHandlerMapping 與AnnotationMethodHandlerAdapter 這兩個bean。所以第一種配置無法注入  interceptors屬性,就不能指定攔截器。

當使用這種配置時

?
1
2
3
<mvc:interceptors
    <bean class="sin.cara.interceptors.MyInterceptors" /> 
</mvc:interceptors>

使不使用

?
1
<mvc:annotation-driven />

都沒關係,都會成功攔截。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章