1. 程式人生 > >spring中事件機制

spring中事件機制

一、一些概念

 事件是可以被控制元件識別的操作,如按下確定按鈕,選擇某個單選按鈕或者複選框。每一種控制元件有自己可以識別的事件,如窗體的載入、單擊、雙擊等事件,編輯框(文字框)的文字改變事,等等。事件有系統事件和使用者事件。系統事件由系統激發,如時間每隔24小時,銀行儲戶的存款日期增加一天。使用者事件由使用者激發,如使用者點選按鈕,在文字框中顯示特定的文字。事件驅動控制元件執行某項功能。

 觸發事件的物件稱為事件傳送者;接收事件的物件稱為事件接收者。

 事件模型一般用到了觀察者模式,下面簡單介紹下:

觀察著模式

  • SUBJECT
    • 目標知道它的觀察者。可以有任意多個觀察者觀察同一個目標。
    • 提供註冊和刪除觀察者物件的介面。
  • Observer(觀察者)
    • 為那些在目標發生改變時需獲得通知的物件定義一個更新介面。
  • ConcreteSubject(具體目標)
    • 將有關狀態存入各ConcreteObserver物件。
    • 當它的狀態發生改變時,向它的各個觀察者發出通知。
  • ConcreteObserver(具體觀察者)
    • 維護一個指向ConcreteSubject物件的引用。
    • 儲存有關狀態,這些狀態應與目標的狀態保持一致。
    • 實現Observer的更新介面以使自身狀態與目標的狀態保持一致。

二、spring事件機制

首先上圖一張:

spring_event

  • ApplicationListener 就是我們的 Observer,需要到容器中註冊。他要關心他所關心的ApplicationEvent 。一般有如下程式碼:if (event instanceof BlackListEvent) {}
  • ApplicationEventMulticaster是我們的SUBJECT一個代理。他會管理我們的 ApplicationListener 。
  • ApplicationEvent 是事件,它就是媒介,充當介質的作用。

在spring中,容器管理所有的 bean。是ApplicationEvent 驅動的,一個ApplicationEvent  publish了,觀察這個事件的監聽者就會送到通知。

具體核心程式碼如下: ApplicationEventMulticaster 會遍歷所有的 監聽器,再啟動一個執行緒呼叫監聽器的onApplicationEvent方法。

 

三、例項程式碼

          場景:程式發現一個有問題的使用者,再會把這個的使用者記錄下來,採取 事件模型就這樣設計

  •  
    • 發現有問題的使用者 
    • 把問題記錄下來 
    • 媒介也就是事件

1、先來一個事件

  

2、一個監聽器

 

3、發現有問題的使用者,並且publish

 

4、配置檔案

 

5、呼叫方法