spring源码解析系列之事件驱动模型架构

说在前面

本文转自“天河聊技术”微信公众号

为什么要去研究spring源码,我认为java最NX的就是我写接口你来实现,像oracle,要么就是想spring这样框架,什么框架我都可以整合你,这么NX的框架你没有想研究下源码的冲动吗。O(∩_∩)O哈哈~。

 

正文

事件监听器

今天介绍下,spring架构体系中的事件模型,面向事件编程可以使你的应用扩展性更好,设计更优美,更有设计感,也是解耦最常用的方式,首先看下类图。

181408_U7sG_3775437.png

ApplicationListener 事件监听器接口,基于观察者模式实现。

GenericApplicationListener 处理基于通用的事件监听器接口,提供了一种基于事件类型的监测,如下图

boolean supportsEventType(ResolvableType eventType);

是SmartApplicationListener的改良版本。

SmartApplicationListener 基于事件的监听器接口,如下图

boolean supportsEventType(Class<? extends ApplicationEvent> eventType);

ApplicationListenerMethodAdapter GenericApplicationListener适配器实现,如下图

public class ApplicationListenerMethodAdapter implements GenericApplicationListener {

可以看到是通过实现接口这种方式的适配器模式实现,在之前的文章有介绍,为什么实现接口这种方式比继承类这种实现扩展性更好,java是单继承,用实现接口这种方式可以间接的实现的多继承,扩展性更好。

SourceFilteringListener 基于GenericApplicationListener,SmartApplicationListener的装饰器模式实现,从指定的事件源筛选事件,调用它的委托侦听器来匹配应用程序事件对象。

GenericApplicationListenerAdapter  GenericApplicationListener适配器模式实现。

 

事件

204614_dlTW_3775437.png

ApplicationEvent 事件抽象类

ApplicationContextEvent 用于应用程序上下文的事件的基类

ContextStoppedEvent 当应用程序上下文停止时引发的事件

ContextRefreshedEvent 在ApplicationContext被初始化或刷新时引发的事件

ContextStartedEvent 当应用程序上下文启动时引发的事件

ContextClosedEvent 当应用程序上下文关闭时引发的事件

 

发布与订阅相关

ApplicationEventMulticaster 接口由可以管理多个ApplicationListener对象的对象实现,并向它们发布事件

AbstractApplicationEventMulticaster 提供基本的侦听器注册功能

SimpleApplicationEventMulticaster 提供基本的侦听器注册功能,忽略它不感兴趣的事件

org.springframework.context.ApplicationEventPublisherAware 任何对象希望被其运行的ApplicationEventPublisher(通常是ApplicationContext)通知的任何对象实现的接口

EventPublicationInterceptor 事件发布拦截器

ApplicationEventPublisher 封装事件发布功能的接口

 

说到最后

本次先介绍了大概的框架,下一篇介绍具体的实现源码解析。

转载于:https://my.oschina.net/u/3775437/blog/1801833

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值