Web(一)
1、拦截器(interceptor)与过滤器(filter)的相同与不同之处?
相同之处:两者都是aop编程思想的体现,都能实现权限检查、日志记录等。
不同之处:
1、规范和应用范围不同:过滤器filter是servlet规范中规定的,是由servlet容器支持的,只能用于web程序中;拦截器是spring容器中,是spring框架支持的,既可以用于web程序中,也可以用于Application、Swing程序中;
2、使用资源不同:拦截器interceptor是spring的一个组件,归spring管理,配置在spring文件中,因此可以使用spring的任何资源和对象。例如service对象、数据源、事务管理等,通过IOC容器注入到拦截器即可,而filter不能;
3、使用深度不同:过滤器filter只能在servlet前后器作用,而拦截器interceptor可以深入到方法前后、抛异常前后等,因此拦截器使用具有更大弹性,在spring架构中,优先使用拦截器;
总结:
1、拦截器基于java反射机制,不依赖servlet容器,只对action请求起作用,可以访问action上下文,在action的生命周期中拦截器可以多次被调用,拦截器可以调用ioc容器中各个bean;
2、过滤器基于函数回调,依赖servlet容器,过滤器所有请求都起作用,不能访问action上下文,过滤器只能在容器初始化被调用一次,不能调用ioc容器中的各个bean;