1、事件監聽機制概述java
2、事件監聽機制結構架構
3、Spring監聽機制架構框架
Spring的Application擁有發佈事件而且註冊事件監聽器的能力,擁有一套完整的事件發佈和監聽機制。在Java中,經過java.util. EventObject來描述事件,經過java.util. EventListener來描述事件監聽器,在衆多的框架和組件中,創建一套事件機制一般是基於這兩個接口來進行擴展。設計
在一個事件體系中,有如下幾個重要的概念。3d
一、事件源:事件對象的產生者,任何一個EventObject都有一個來源 下載htm
二、事件監聽器註冊表:當事件框架或組件收到一個事件後,須要通知全部相關的事件監聽器來進行處理,這個時候就須要有個存儲監聽器的地方,也就是事件監聽器註冊表。對象
三、事件廣播器:事件廣播器在整個事件機制中扮演一箇中介的角色,當事件發佈者發佈一個事件後,就須要經過廣播器來通知全部相關的監聽器對該事件進行處理。blog
下圖就是事件機制的結構圖 下載接口
Spring事件發佈機制事件
在Spring中,事件機制大概也是這麼個結構,具體的實現採用觀察者模式。下面咱們來看看Spring的事件機制設計類圖 下載
一、ApplicationEventPublisher是Spring的事件發佈接口,事件源經過該接口的pulishEvent方法發佈事件。
二、ApplicationEventMulticaster就是Spring事件機制中的事件廣播器,它默認提供一個SimpleApplicationEventMulticaster實現,若是用戶沒有自定義廣播器,則使用默認的。它經過父類AbstractApplicationEventMulticaster的getApplicationListeners方法從事件註冊表中獲取事件監聽器,而且經過invokeListener方法執行監聽器的具體邏輯
三、ApplicationListener就是Spring的事件監聽器接口,全部的監聽器都實現該接口,本圖中列出了典型的幾個子類。其中RestartApplicationListnener在SpringBoot的啓動框架中就有使用 下載
四、在Spring中一般是ApplicationContext自己擔任監聽器註冊表的角色,在其子類AbstractApplicationContext中就聚合了事件廣播器ApplicationEventMulticaster和事件監聽器ApplicationListnener,而且提供註冊監聽器的addApplicationListnener方法。
經過上圖就能較清晰的知道當一個事件源產生事件時,它經過事件發佈器ApplicationEventPublisher發佈事件,而後事件廣播器ApplicationEventMulticaster會去事件註冊表ApplicationContext中找到事件監聽器ApplicationListnener,而且逐個執行監聽器的onApplicationEvent方法,從而完成事件監聽器的邏輯。