程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring中ApplicationContext的事件機制(一 )

Spring中ApplicationContext的事件機制(一 )

編輯:關於JAVA

在Windows編程中,我們常常需要處理各類事件,比如鼠標單擊事件、雙擊事件。在Spring中, ApplicationContext也有發布和監聽時間的能力。我們知道,在windows開發中,如果要響應某個事件,我 們只需要編寫相應windows消息的響應函數就可以了。比如鼠標單擊事件,相應的消息就是 WM_LBUTTONDOWN 。在Spring中也是一樣,Spring中ApplicationEvent類及其子類就相當於Windows中的消 息,事件監聽器ApplcationListener的實現類就相當於Windows編程中的消息處理函數。

要使用Spring事件處理機制,就必須先定義一個事件(定義一個Windows消息),發布出去後,再定義 一個事件監聽器(編寫消息處理函數),發布到容器中。這樣,當該事件發生後,我們就可以在事件監聽 器的onApplcationEvent()方法中處理我們的事件了。

ApplicationEvent類是抽象類,不能被實例化,故Spring中的事件類都是其子類。我們要自定義一個 事件就必須擴展該類,該類的代碼如下:

代碼  查看源代碼copy to clipboard打印

public abstract class ApplicationEvent extends EventObject {

   private final long timestamp;

   public ApplicationEvent(Object source) {
     super(source);
     this.timestamp = System.currentTimeMillis();
   }

   public long getTimestamp() {
     return timestamp;
   }

}
public abstract class ApplicationEvent extends EventObject {
   private final long timestamp;
   public ApplicationEvent(Object source) {
     super(source);
     this.timestamp = System.currentTimeMillis();
   }
   public long getTimestamp() {
     return timestamp;
   }
}

如上所示,抽象類ApplicationEvent中timestamp字段存貯事件發生的時間,在該事件發生時(事件類 被實例化),ApplicationEvent會自動的把當前的時間存儲到該字段中,在應用中可以通過 getTimestamp()方法獲取該時間。如果應用要傳遞一個對象給監聽器,那麼可以把要傳遞的對象作為構造 函數的參數source傳遞給ApplicationEvent類。

為了監聽事件的發生並處理事件,Spring提供了一個接口ApplicationListener,代碼如下:

代碼  查看源代碼copy to clipboard打印

public abstract class ApplicationEvent extends EventObject {

   private final long timestamp;

   public ApplicationEvent(Object source) {
     super(source);
     this.timestamp = System.currentTimeMillis();
   }

   public long getTimestamp() {
     return timestamp;
   }

}
public abstract class ApplicationEvent extends EventObject {
   private final long timestamp;
   public ApplicationEvent(Object source) {
     super(source);
     this.timestamp = System.currentTimeMillis();
   }
   public long getTimestamp() {
     return timestamp;
   }
}

當有ApplicationEvent類的子類被發布到ApplicationContext時,如果已經在上下文中部署有實現了 ApplicationListener接口的Bean,那麼這個Bean會得到一個通知,方法onApplicationEvent()會被調用 ,並將該事件的實例作為參數傳入。與Windows消息處理函數不同的是,這個方法會響應所有的事件。因 此在編寫onApplicationEvent()方法時,應當要先判斷當前的事件是否是我們要響應的事件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved