Spring面试题, Spring MVC 中的拦截器是什么?如何定义一个拦截器?
Spring面试题, Spring MVC 中的拦截器是什么?如何定义一个拦截器?
QA
Step 1
Q:: Spring MVC 中的拦截器是什么?如何定义一个拦截器?
A:: Spring MVC 中的拦截器是一种用于对请求进行预处理和后处理的机制。它类似于 Servlet 中的 Filter,但更加灵活且强大。拦截器可以用于记录日志、用户认证、国际化处理等。要定义一个拦截器,需要实现 HandlerInterceptor 接口,通常需要实现 preHandle、postHandle 和 afterCompletion 三个方法。在 Spring 配置文件或使用 @
Configuration 注解的 Java 配置类中,将拦截器注册到相应的 URL 路径上。
Step 2
Q:: 如何实现一个自定义的拦截器?
A:: 要实现一个自定义的拦截器,需要实现 HandlerInterceptor 接口或继承 HandlerInterceptorAdapter 类,并重写 preHandle、postHandle 和 afterCompletion 方法。例如:public class MyInterceptor implements HandlerInterceptor {...} 然后在 Spring 配置文件中注册该拦截器:<mvc:interceptors><bean class="com.example.MyInterceptor" /></mvc:interceptors>
。
Step 3
Q:: 拦截器和过滤器的区别是什么?
A:: 拦截器(Interceptor)和过滤器(Filter)虽然都用于处理请求,但它们在 Spring MVC 中的位置和应用场景有所不同。拦截器属于 Spring MVC 的一部分,专门用于处理 Controller 之前和之后的请求,而过滤器是 Servlet 规范的一部分,可以在请求进入 Servlet 之前或响应离开 Servlet 之后处理。拦截器的实现更加灵活,可以访问 Spring 的上下文和依赖注入,而过滤器则更独立于框架。