过滤器(Filter),拦截器(Interceptor),和切面编程(AOP,Aspect-Oriented Programming)是在软件开发中用于实现横切关注点(cross-cutting concerns)的不同技术。
过滤器(Filter):
过滤器是在 Java Web 应用中使用的一种机制,通常与 Servlet 技术一起使用。
过滤器用于在请求被发送到 Servlet 之前或响应被发送到客户端之前执行特定的任务。
主要用于处理与 HTTP 请求和响应相关的内容,如编码转换、身份验证、日志记录等。
过滤器是 Java EE 规范的一部分,可以配置在 web.xml 文件中。
过滤器使用场景
- 统⼀设置编码
- 过滤敏感字符
- 登录校验
- URL级别的访问权限控制
- 数据压缩
拦截器(Interceptor):
拦截器是在 Spring 框架中用于处理请求的一种机制。
与过滤器类似,拦截器可以在请求被处理前或者响应被发送前执行一些操作。
与过滤器相比,拦截器更加灵活,能够直接访问 Spring 的上下文(ApplicationContext)和被调用的控制器。
拦截器通常用于处理业务逻辑,例如权限验证、日志记录等。
拦截器使用场景
- ⽇志记录
- 权限校验
- 登录校验
- 性能检测[检测⽅法的执⾏时间]
- 其实拦截器和过滤器很像,有些使⽤场景。⽆论选⽤谁都能实现。需要注意的使他们彼此的使⽤范围,触发机制。
切面编程(AOP):
切面编程是一种编程范式,它通过将横切关注点从核心业务逻辑中分离出来,以模块化的方式进行开发。
AOP 通过在不同的层次上,如方法调用、对象实例化等,注入横切关注点。
在 Spring 中,AOP 可以通过切面(Aspect)实现。切面定义了横切关注点的逻辑,而连接点(Join Point)表示在应用程序执行过程中插入切面的点。
切面可以用于处理一系列相关的横切关注点,例如事务管理、性能监控等。
总结差异:
过滤器和拦截器主要用于处理请求和响应,而 AOP 更广泛地涉及到对方法调用和对象实例化等横切关注点的处理。
过滤器通常与 Servlet 相关联,拦截器通常与 Spring MVC 相关联,而 AOP 是一种更为通用的编程范式,可以用于各种应用场景。
过滤器和拦截器是基于面向对象的编程思想,而 AOP 是一种更高层次的编程范式,强调横切关注点的模块化。