2019独角兽企业重金招聘Python工程师标准>>>
说在前面
本文转自“天河聊技术”微信公众号
为什么要去研究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 封装事件发布功能的接口
说到最后
本次先介绍了大概的框架,下一篇介绍具体的实现源码解析。