相同点:都是通过 面向切面去完成,对方法实现增强,都可以拦截请求方法。都可以通过Order注解设定执行顺序
1、拦截器基于java反射,过滤器基于函数回调
2、拦截器不依赖servlet容器,过滤器依赖servlet容器
3、拦截器只能对action请求拦截(拦截器可以用于web也可以用于App程序或者Swing程序),过滤器对所有请求拦截
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
6、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
7、过滤器(Filter)只在Servlet前后起作用。而Inteceptor 能到方法前后、异常抛出前后等,因此拦截器的使用觉有更大的弹性。