本人之前面试的时候被问到“请你说说过滤器和拦截器有什么区别”,但是由于没复习好,所以回答的并不是很好。所以今天就想着整理这篇文章介绍一下两者的区别,文章内容不多,但是方便复习和记忆~
过滤器和拦截器的区别如下:
- 生效原理不同:拦截器Interceptor基于Java的反射机制;而过滤器Filter基于函数回调。
- 执行时机不同:拦截器在servlet和controller之间执行;而过滤器是在请求进入tomcat容器之后,进入servlet之前执行的。在请求结束过后进行返回时,是在servlet处理之后,返回前端之前执行的。
- 规范不同:拦截器是在Spring容器内的,由Spring框架支持的;而过滤器是在Servlet规范中定义的,是Servlet容器支持的。
- 可以使用的资源不同:拦截器作为Spring的组件之一,归Spring管理,配置在Spring的文件中,因此可以使用Spring里的任何资源,例如:Service对象、事务管理、数据源等,只需要通过IOC注入即可;而Filter做不到这点。
- 深度不同:拦截器能深入到方法执行前后、异常抛出前后等起作用,具有更大的灵活性;而Filter只在Servlet前后起作用。