过滤器和拦截器的区别
都是 Aop 思想的一种体现,用来解决项目中 某一类 问题的两种接口(工具),都可以对请求做一些增强
出身
过滤器来自 servlet
拦截器来自 spring
使用范围
过滤器 Filter 实现了 iavax.servlet.Filter 接口,也就是说过滤器的使用要依赖于 Tomcat 等容器,所以它只能在 web 程序中使用。
拦截器 Interceptor 实现了
org.springframework.web.servlet 接口,它是由 Spring 容器进行管理,并不依赖 Tomcat 等容器,既可以应用在 web 程序中,也可以应用在非 web 程序中(Application、Swing)。
实现原理
过滤器基于过滤器链 ApplicationFilterChain 实现
拦截器基于反射
使用场景
过滤器用于 字符编码设置、响应数据压缩(通用功能)
拦截器用于 是否登录判断、权限判断、日志等等(偏重业务功能)
触发时机
Mybatis 的执行器
SimpleExecutor:简单的执行器,每次执行操作都会开启一个新的 Statement 对象,用完就会立刻关闭
ReuseExecutor:重复使用的执行器,实现了对 Statement 对象的复用
BatchExecutor:可执行批处理任务的执行器。
所有的执行器都必须是在 SqlSession 的生命周期之内,