说在前面java
本文转自“天河聊技术”微信公众号spring
为何要去研究spring源码,我认为java最NX的就是我写接口你来实现,像oracle,要么就是想spring这样框架,什么框架我均可以整合你,这么NX的框架你没有想研究下源码的冲动吗。O(∩_∩)O哈哈~。编程
正文微信
事件监听器架构
今天介绍下,spring架构体系中的事件模型,面向事件编程能够使你的应用扩展性更好,设计更优美,更有设计感,也是解耦最经常使用的方式,首先看下类图。oracle
ApplicationListener 事件监听器接口,基于观察者模式实现。框架
GenericApplicationListener 处理基于通用的事件监听器接口,提供了一种基于事件类型的监测,以下图spa
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 封装事件发布功能的接口
说到最后
本次先介绍了大概的框架,下一篇介绍具体的实现源码解析。