拦截器:
类似于Servlet中的过滤器Filter,用于对处理器Handler进行预处理(在处理器执行之前执行)和后处理(在处理器执行之后执行)
和过滤器的区别:
1)拦截器是属于框架的,Filter是属于JavaEE的
2)拦截器可以多次使用,而Filter只能在容器初始化时调用一次
3)拦截器只能对Handler映射请求起作用,而Filter对所有请求都起作用(包括静态资源请求)
4)拦截器不依赖Servlet容器,而Filter是依赖Servlet容器的
5)拦截器是基于java反射的,而Filter是基于函数回调的
6)拦截器可以获取操作Spring中的组件(在拦截中获取Service层的一个对象调用业务方法),而Filter不可以
配置多个拦截器时,调用顺序:
拦截器1,拦截器2,拦截器3
调用:1→2→3
返回:3→2→1
配置拦截器:
单个映射器配置:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<list>
<bean class="com.springmvc.interceptor.MyInterceptor" />
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
全局配置:
使用mvc:annotation-driven/ 配置映射器和适配器
然后再springMVC全局配置中配置:
<mvc:interceptors>
<!--可以配置多个拦截器,执行顺序的按照配置顺序从上往下执行-->
<mvc:interceptor>
<!--配置拦截路径-->
<mvc:mapping path="/**"/>
<!--拦截器对象-->
<bean class="com.springmvc.interceptor.MyInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<!--配置拦截路径-->
<mvc:mapping path="/**"/>
<!--引用外部bean方式:配置拦截器对象-->
<ref bean="xxxInterceptor"/>
<!--<bean class="xxx.xxx.interceptors.XXXInterceptor"/>-->
</mvc:interceptor>
</mvc:interceptors>
<bean id="xxxInterceptor" class="xxx.xxx.interceptors.XXXInterceptor"/>