之前看过一篇博客有这么一句话:
过滤器是取你所想,拦截器是拒你所不想
但其实两者都可以理解为起过滤的作用。
具体区别而言,总结有如下几点:
方面 | filter | interceptor |
---|---|---|
实现原理 | 基于函数回调 | java反射,动态代理 |
是否依赖servlet | java原生,依赖servlet | spring框架所有,不依赖servlet |
作用范围 | 所有的url,可以配置 | 无法配置url,只是针对实现某接口的类的方法在其前后进行处理,这也正是动态代理的逻辑 |
是否可以自动注入context中的bean | 不能,但可以通过getBean方法获得 | 可以 |
如何选择 | 在纯Java的应用中尽量选择filter,减小第三方 | 在spring应用中官方推荐interceptor |
过滤器 -> 拦截器 -> aop -> 业务逻辑 -> 拦截器的post方法 -> filter的destroy
推荐阅读: