最近在學習攔截器,沒想到剛開始就碰到難題了。我明明配置好了攔截器,但是絲毫沒有起作用,百思不得其解。
這是起初的配置:
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 /> |
都沒關係,都會成功攔截。