最详细的讲解过滤器,拦截器,AOP的区别

一.过滤器,拦截器,AOP简介


过滤器

1.过滤器的概念

  • Filter(过滤器)是J2EE的规范,Servlet2.3开始引入/实现的是职责链模式。多个过滤器形成一个过滤器链,过滤器链中不同过滤器的先后顺序由部署文件web.xml中过滤器映射的顺序决定。
  • 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应。
  • 实现Filter接口,分别有init()用于完成过滤器的初始化,destroy() 用于过滤器销毁前,完成某些资源的回收,doFilter()实现过滤功能,对每个请求增加额外的处理。
  • 基于 Servlet,通过函数回调方式实现,可以过滤请求和图片文件等,每个请求一个过滤器只能过滤一次。
  • 在请求到达Servlet/JSP之前,过滤器截获请求。
  • 在响应送给客户端之前,过滤器截获响应。
  • 最先截获客户端请求的过滤器将最后截获Servlet/JSP的响应信息。

2.过滤器的主要作用

  • 用户访问权限处理
  • 设置字符集乱码处理
  • 过滤敏感词汇、压缩响应信息

拦截器

1. 拦截器的概念(基于SpringMVC)
  • 基于 java 的反射机制,代理模式实现
  • java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。
  • 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理
  • 实现HandlerInterceptor接口有三个方法,分别为在业务处理器处理请求之前被调用(preHandle()),在业务处理器处理完请求后(postHandle()),完全处理完请求后被调用(afterCompletion())。
  • 拦截器采用责任链模式,在责任链模式里,很多对象由每一个对象对其下一个的引用而连接起来形成一条链。.责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行。
2.拦截器作用
  • 只能拦截请求,可以访问上下文等对象,功能强大,一个请求可多次拦截。
  • 用户访问权限处理
  • 登记日志

过滤器与拦截器的区别

  • 拦截器是基于java的反射机制的,而过滤器是基于函数回调
  • 过滤器依赖与servlet容器,而拦截器不依赖与servlet容器
  • 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
  • 在action的生命周期中,拦截器可以多次被调用,过滤器时在容器初始化的时候初始化一次,请求一次调用一次。

AOP

1.AOP的概念
  • 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
  • AOP的工作重心在于如何将增强应用于目标对象的连接点上,这包括第一,如何通过切点和增强定位到连接点,第二,如何在增强中编写切面代码。
AOP重点术语介绍
  • Aspect(切面): 通常是一个类,里面可以定义切入点和通知
  • JointPoint(连接点): 程序执行过程中明确的点,一般是方法的调用
  • Advice(通知): AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around
  • Pointcut(切入点): 就是带有通知的连接点,在程序中主要体现为书写切入点表达式
  • 目标对象(Target): 增强逻辑的织入目标类
  • 引介(Introduction): 引介是特殊的增强,他为类添加一些属性和方法。
  • 织入(Weaving): 将增强添加到目标类的具体链接点的过程。
  • AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类
3.AOP的作用
  • 日志记录
  • 性能统计
  • 安全控制
  • 事务处理
  • 异常处理
  • 只能应用于由 Spring 容器管理的 bean。

过滤器,拦截器,AOP的区别

  • 面向切面拦截的是类的元数据(包、类、方法名、参数等),相对于拦截器更加细致,而且非常灵活,拦截器只能针对URL做拦截,而AOP针对具体的代码,能够实现更加复杂的业务逻辑。
  • Spring AOP和拦截器一样,都是AOP的实现方式的一种,均使用代理模式实现。
  • Spring AOP的注解有@Before、@After、@AfterReturning、@AfterThrowing、@Around,可以更灵活的配置要监听处理的Bean。
  • 拦截器只对action负责,作用层面一般位于Controller层,Spring AOP主要是拦截对Spring管理的Bean的访问,一般作用与Service层

三者执行顺序: 过滤器 -> 拦截器 -> AOP

你可能感兴趣的:(SPRING,拦截器,过滤器,AOP)