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

说在前面

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

正文

事件监听器

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

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适配器模式实现。

事件

ApplicationEvent 事件抽象类

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

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

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

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

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

发布与订阅相关

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

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

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

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

EventPublicationInterceptor 事件发布拦截器

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

说到最后

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

HLeQZmUMfUS6UXdSXCyz9g==.jpg

长按二维码关注

猜你喜欢

转载自my.oschina.net/u/3775437/blog/1801833
今日推荐