今天有童鞋问我 java 中的 Filter 过滤器、interceptor拦截器 的区别,额。。。好像这个鬼问题被回答了无数次,但我觉得能不能用更好的方式让别人理解,我们已经知道了这两个玩意儿就是两个过滤器类, 在javaweb中, 一切事物都离不开容器!
一、站在容器的角度来看,它们是这样的 :
这里的区别在于:filter属于servlet管理,interceptor属于springmvc容器管理,基于这个特性我们可以理解一下这些区别:
- interceptor不依赖servlet,filter依赖于servlet。
- interceptor因为属于mvc容器只能对contrler的action请求起作用,filter则拦截所有的请求,比如对静态资源的拦截过滤。
- 既然访问interceptor对action起作用那他就可以获取方法上下文、栈里的参数,而filter不行。
- interceptor可以获取spring容器中的各个 bean ,而filter就不行,因为他不归spring容器管理,所以可以在interceptor里注入一个service来使用。
二、另外一点,我们来看下interceptor,filter的执行顺序:绿色表示interceptor的作用范围,可以看到它包裹了controller,黄色代表Filter 它包裹了所有
可能这还不是全部,剩下的希望留给读者去细究,但从整体上我们了解了他们区别,只能说带给大家一些思考,个人理解有所纰漏,还请老铁们多多指教!