spring源碼解析系列之事件驅動模型架構

說在前面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 封裝事件發佈功能的接口

 

說到最後

本次先介紹了大概的框架,下一篇介紹具體的實現源碼解析。

相關文章
相關標籤/搜索