(殘夢追月原創(chuàng),轉(zhuǎn)載注明)
在Windows編程中,我們常常需要處理各類事件,比如鼠標(biāo)單擊事件、雙擊事件。在Spring中, ApplicationContext也有發(fā)布和監(jiān)聽時間的能力。我們知道,在windows開發(fā)中,如果要響應(yīng)某個事件,我們只需要編寫相應(yīng)windows消息的響應(yīng)函數(shù)就可以了。比如鼠標(biāo)單擊事件,相應(yīng)的消息就是WM_LBUTTONDOWN 。在Spring中也是一樣,Spring中ApplicationEvent類及其子類就相當(dāng)于Windows中的消息,事件監(jiān)聽器ApplcationListener的實現(xiàn)類就相當(dāng)于Windows編程中的消息處理函數(shù)。
要使用Spring事件處理機(jī)制,就必須先定義一個事件(定義一個Windows消息),發(fā)布出去后,再定義一個事件監(jiān)聽器(編寫消息處理函數(shù)),發(fā)布到容器中。這樣,當(dāng)該事件發(fā)生后,我們就可以在事件監(jiān)聽器的onApplcationEvent()方法中處理我們的事件了。
ApplicationEvent類是抽象類,不能被實例化,故Spring中的事件類都是其子類。我們要自定義一個事件就必須擴(kuò)展該類,該類的代碼如下:
如上所示,抽象類ApplicationEvent中timestamp字段存貯事件發(fā)生的時間,在該事件發(fā)生時(事件類被實例化),ApplicationEvent會自動的把當(dāng)前的時間存儲到該字段中,在應(yīng)用中可以通過getTimestamp()方法獲取該時間。如果應(yīng)用要傳遞一個對象給監(jiān)聽器,那么可以把要傳遞的對象作為構(gòu)造函數(shù)的參數(shù)source傳遞給ApplicationEvent類。
為了監(jiān)聽事件的發(fā)生并處理事件,Spring提供了一個接口ApplicationListener,代碼如下:
當(dāng)有ApplicationEvent類的子類被發(fā)布到ApplicationContext時,如果已經(jīng)在上下文中部署有實現(xiàn)了ApplicationListener接口的Bean,那么這個Bean會得到一個通知,方法onApplicationEvent()會被調(diào)用,并將該事件的實例作為參數(shù)傳入。與Windows消息處理函數(shù)不同的是,這個方法會響應(yīng)所有的事件。因此在編寫onApplicationEvent()方法時,應(yīng)當(dāng)要先判斷當(dāng)前的事件是否是我們要響應(yīng)的事件。
By:殘夢追月
posted on 2008-07-24 16:39
殘夢追月 閱讀(3067)
評論(3) 編輯 收藏 所屬分類:
Spring