过滤器,拦截器,aop之间差异
springmvc的流程:
过滤器
过滤器拦截的是URL,用于处理HTTP请求和响应
-
位置: 主要应用于Web开发中,在Servlet容器中使用。
-
范围: 作用范围覆盖整个请求的生命周期,包括请求前的预处理和响应后的处理。
-
调用时机: 在请求进入目标资源之前执行预处理,离开目标资源之后执行后处理。
-
主要功能: 用于处理HTTP请求和响应,可以进行字符编码转换、身份验证、日志记录等。
-
配置: 通过在web.xml中配置过滤器来指定过滤器的生命周期和作用范围。
拦截器
拦截器拦截的是URL,用于处理HTTP请求和响应
-
位置: 主要应用于Web框架(如Spring MVC)中,也可用于其他应用层面。
-
范围: 主要作用于方法调用的层面,可以针对Controller中的方法进行拦截。
-
调用时机: 在请求进入目标方法之前和离开目标方法之后执行。
-
主要功能: 通常用于处理方法级别的拦截,例如权限验证、日志记录、性能监控等。
-
配置: 通过配置拦截器链或使用注解来指定拦截器的应用范围和顺序。
AOP
面向切面拦截的是类的元数据(包、类、方法名、参数等)
AOP(面向切面编程):
-
位置: 可以应用于多个层次,不仅限于Web开发。
-
范围: 主要用于解决横切关注点的问题,将与业务逻辑无关的横切关注点从业务逻辑中分离出来。
-
调用时机: 在方法调用的各个阶段,如方法前、方法后、方法异常等,通过切面进行插入。
-
主要功能: 通过定义切面,可以实现横切关注点的功能,例如事务管理、日志记录、安全性检查等。
-
配置: 通过配置切面和通知(Advice)来指定横切关注点和切入点,可以通过XML配置、注解或者AspectJ等方式实现。
综上所述,过滤器主要用于整个请求的生命周期,处理HTTP请求和响应;拦截器主要用于方法调用的层面,实现方法级别的拦截;AOP则是一种更广泛的编程范式,用于解决横切关注点的问题,提高代码的模块化。