Listener、Filter、Interceptor的区别?

一.Listener监听器(三者中相对简单的就是监听器,以spring事件监听为例)Listener监听器原理1.主题(被观察者)Applica

一.Listener监听器(三者中相对简单的就是监听器,以spring事件监听为例)

Listener、Filter、Interceptor的区别?

Listener监听器原理

1.主题(被观察者)ApplicationContext,也即spring上下文

2.事件Spring 提供5种标准的事件:更新事件(ContextRefreshedEvent),ApplicationContext被初始化或者更新时发布,也可以在调用ConfigurableApplicationContext 接口中的refresh()方法时被触发;开始事件(ContextStartedEvent),当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件;停止事件(ContextStoppedEvent),当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件;关闭事件(ContextClosedEvent),当ApplicationContext被关闭时触发该事件,容器被关闭时,其管理的所有单例Bean都被销毁;请求处理事件(RequestHandledEvent),在Web应用中,当一个http请求(request)结束触发该事件。

3.广播者ApplicationEventMulticaster,负责维护操作监听器集合(新增和删除监听者);根据主题的事件变化,发布事件(循环调用集合中的监听器方法)

4.监听者(观察者)监听者都要注册到ApplicationEventMulticaster广播者集合中,实现统一的接口ApplicationListener##onApplicationEvent方法,注意,观察者和被观察者未完全解耦!

二.Filter(过滤器)

javax.servlet.Filter(servlet包下面的,说明它是servlet规范中的类,而servlet是用来处理网络请求的一套规范,所以过滤器依赖servlet)

Listener、Filter、Interceptor的区别?

Filter过滤器原理

Listener、Filter、Interceptor的区别?

过滤器代码示例

ApplicationFilterChain(过滤器链)

1.ApplicationFilterChain类似于监听器中的广播者,维护一个过滤器集合

2.循环过滤器执行过滤动作,只不过,这里的集合有严格的顺序,内部其实是一个filters数组,形成一个完整的调用链,并不是链表结构(有头和尾的指针)

3.过滤器和上面监听器很像,都是维护一个集合,然后串行方法调用,注意,如果中间有一个异常/超时操作,都会影响全局

三.Interceptor拦截器(三者中比较复杂的)

Listener、Filter、Interceptor的区别?

Interceptor拦截器原理

1.拦截器,套路也一样,有个集合来维护,调用会形成调用链,和过滤器不同的是,拦截器有两个实现方法pre、after,而过滤器只有一个doFilter方法
2.拦截器是基于java的反射机制调用的,而过滤器是基于函数回调
3.拦截器不依赖与servlet,而过滤器强依赖servlet
4.拦截器覆盖controller,而过滤器覆盖servlet,监听器使用范围最广,不受限制(观察者模式)

Listener、Filter、Interceptor的区别?

拦截器、过滤器范围

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/83672.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信