說在前面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 封裝事件發佈功能的接口
說到最後
本次先介紹了大概的框架,下一篇介紹具體的實現源碼解析。