Spring 源码 事件监听
2018-08-28 16:40
302 查看
spring 监听器:
一、事件监听机制概述
二、事件监听机制结构
三、Spring监听机制架构
Spring的Application拥有发布事件并且注册事件监听器的能力,拥有一套完整的事件发布和监听机制。在Java中,通过EventObject来描述事件,通过EventListener来描述事件监听器,在众多的框架和组件中,建立一套事件机制通常是基于这两个接口来进行扩展。
在一个事件体系中,有以下几个重要的概念。
1、事件源:事件对象的产生者,任何一个EventObject都有一个来源
2、事件监听器注册表:当事件框架或组件收到一个事件后,需要通知所有相关的事件监听器来进行处理,这个时候就需要有个存储监听器的地方,也就是事件监听器注册表。
3、事件广播器:事件广播器在整个事件机制中扮演一个中介的角色,当事件发布者发布一个事件后,就需要通过广播器来通知所有相关的监听器对该事件进行处理。
下图就是事件机制的结构图:
Spring事件发布机制
在Spring中,事件机制大概也是这么个结构,具体的实现采用观察者模式。下面我们来看看Spring的事件机制设计类图
1、ApplicationEventPublisher是Spring的事件发布接口,事件源通过该接口的pulishEvent方法发布事件。
2、ApplicationEventMulticaster就是Spring事件机制中的事件广播器,它默认提供一个SimpleApplicationEventMulticaster实现,如果用户没有自定义广播器,则使用默认的。它通过父类AbstractApplicationEventMulticaster的getApplicationListeners方法从事件注册表中获取事件监听器,并且通过invokeListener方法执行监听器的具体逻辑
3、ApplicationListener就是Spring的事件监听器接口,所有的监听器都实现该接口,本图中列出了典型的几个子类。其中RestartApplicationListnener在SpringBoot的启动框架中就有使用
4、在Spring中通常是ApplicationContext本身担任监听器注册表的角色,在其子类AbstractApplicationContext中就聚合了事件广播器ApplicationEventMulticaster和事件监听器ApplicationListnener,并且提供注册监听器的addApplicationListnener方法。
通过上图就能较清晰的知道当一个事件源产生事件时,它通过事件发布器ApplicationEventPublisher发布事件,然后事件广播器ApplicationEventMulticaster会去事件注册表ApplicationContext中找到事件监听器ApplicationListnener,并且逐个执行监听器的onApplicationEvent方法,从而完成事件监听器的逻辑。对于每个监听器来说都可以获取到产生的事件,但是否进行处理则由⌚️监听器来决定。
一些常用的事件:
常用的监听器:
ContextRefreshListener
ParentContextCloserApplicationListener
GenericApplicationListener
SmartApplicationListener
一、事件监听机制概述
二、事件监听机制结构
三、Spring监听机制架构
Spring的Application拥有发布事件并且注册事件监听器的能力,拥有一套完整的事件发布和监听机制。在Java中,通过EventObject来描述事件,通过EventListener来描述事件监听器,在众多的框架和组件中,建立一套事件机制通常是基于这两个接口来进行扩展。
在一个事件体系中,有以下几个重要的概念。
1、事件源:事件对象的产生者,任何一个EventObject都有一个来源
2、事件监听器注册表:当事件框架或组件收到一个事件后,需要通知所有相关的事件监听器来进行处理,这个时候就需要有个存储监听器的地方,也就是事件监听器注册表。
3、事件广播器:事件广播器在整个事件机制中扮演一个中介的角色,当事件发布者发布一个事件后,就需要通过广播器来通知所有相关的监听器对该事件进行处理。
下图就是事件机制的结构图:
Spring事件发布机制
在Spring中,事件机制大概也是这么个结构,具体的实现采用观察者模式。下面我们来看看Spring的事件机制设计类图
1、ApplicationEventPublisher是Spring的事件发布接口,事件源通过该接口的pulishEvent方法发布事件。
2、ApplicationEventMulticaster就是Spring事件机制中的事件广播器,它默认提供一个SimpleApplicationEventMulticaster实现,如果用户没有自定义广播器,则使用默认的。它通过父类AbstractApplicationEventMulticaster的getApplicationListeners方法从事件注册表中获取事件监听器,并且通过invokeListener方法执行监听器的具体逻辑
3、ApplicationListener就是Spring的事件监听器接口,所有的监听器都实现该接口,本图中列出了典型的几个子类。其中RestartApplicationListnener在SpringBoot的启动框架中就有使用
4、在Spring中通常是ApplicationContext本身担任监听器注册表的角色,在其子类AbstractApplicationContext中就聚合了事件广播器ApplicationEventMulticaster和事件监听器ApplicationListnener,并且提供注册监听器的addApplicationListnener方法。
通过上图就能较清晰的知道当一个事件源产生事件时,它通过事件发布器ApplicationEventPublisher发布事件,然后事件广播器ApplicationEventMulticaster会去事件注册表ApplicationContext中找到事件监听器ApplicationListnener,并且逐个执行监听器的onApplicationEvent方法,从而完成事件监听器的逻辑。对于每个监听器来说都可以获取到产生的事件,但是否进行处理则由⌚️监听器来决定。
一些常用的事件:
常用的监听器:
ContextRefreshListener
ParentContextCloserApplicationListener
GenericApplicationListener
SmartApplicationListener
相关文章推荐
- 【spring源码学习】spring的事件发布监听机制源码解析
- Spring 源码解析 ---- 事件监听
- (转)spring boot实战(第三篇)事件监听源码分析
- spring boot实战(第三篇)事件监听源码分析
- 对于spring 的自定义事件发布与监听
- Spring中的IOC(四):IOC中其他接口的使用及Spring的事件处理机制(监听机制)
- spring的事件监听机制的简化实现
- JavaEE开发之Spring中的事件发送与监听以及使用Profile进行环境切换
- Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法
- java【源码】事件监听小练习1
- tomcat触发ServletContext初始化监听事件的源码(原创)
- springboot 中事件监听模式的一种实现
- Spring源码之事件驱动模型
- SlidingMenu源码分析及拓展:监听拉出菜单时的滚动事件,将主页变暗
- spring boot实战(第二篇)事件监听
- 浅谈Spring-boot事件监听
- wemall app商城源码Fragment中监听onKey事件
- Spring源码解析-事件
- Spring中使用@Async注解使Even监听事件之间的执行变为异步
- 事件机制-Spring 源码系列(4)