1. 程式人生 > >Spring的監聽事件ApplicationListener和ApplicationEvent及@EventListener用法

Spring的監聽事件ApplicationListener和ApplicationEvent及@EventListener用法

什麼是ApplicationContext? 
它是spring的核心,Context我們通常解釋為上下文環境,但是理解成容器會更好些。 
ApplicationContext則是應用的容器。

Spring把Bean(object)放在容器中,需要用就通過get方法取出來。

ApplicationEvent

是個抽象類,裡面只有一個建構函式和一個長整型的timestamp。

ApplicationListener

是一個介面,裡面只有一個onApplicationEvent方法。

所以自己的類在實現該介面的時候,要實裝該方法。

如果在上下文中部署一個實現了ApplicationListener介面的bean,

那麼每當在一個ApplicationEvent釋出到 ApplicationContext時,
這個bean得到通知。其實這就是標準的Oberver設計模式。

下面給出例子:

首先建立一個ApplicationEvent實現類:

複製程式碼
 1 package com.spring.event;
 2 
 3 import org.springframework.context.ApplicationEvent;
 4 
 5 public class EmailEvent extends ApplicationEvent {
 6     /**
 7      * <p>Description:</p>
8 */ 9 private static final long serialVersionUID = 1L; 10 public String address; 11 public String text; 12 13 public EmailEvent(Object source) { 14 super(source); 15 } 16 17 public EmailEvent(Object source, String address, String text) { 18 super
(source); 19 this.address = address; 20 this.text = text; 21 } 22 23 public void print(){ 24 System.out.println("hello spring event!"); 25 } 26 27 }
複製程式碼

給出監聽器:

複製程式碼
 1 package com.spring.event;
 2 
 3 import org.springframework.context.ApplicationEvent;
 4 import org.springframework.context.ApplicationListener;
 5 public class EmailListener implements ApplicationListener {
 6 
 7     public void onApplicationEvent(ApplicationEvent  event) {
 8         if(event instanceof EmailEvent){
 9             EmailEvent emailEvent = (EmailEvent)event;
10             emailEvent.print();
11             System.out.println("the source is:"+emailEvent.getSource());
12             System.out.println("the address is:"+emailEvent.address);
13             System.out.println("the email's context is:"+emailEvent.text);
14         }
15         
16     }
17 
18 }
複製程式碼

applicationContext.xml檔案配置:

<bean id="emailListener" class="com.spring.event.EmailListener"></bean>

測試類:

複製程式碼
 1 package com.spring.event;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class Test {
 7     public static void main(String[] args) {
 8         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
 9         
10         //HelloBean hello = (HelloBean) context.getBean("helloBean");
11         //hello.setApplicationContext(context);
12         EmailEvent event = new EmailEvent("hello","[email protected]","this is a email text!");
13         context.publishEvent(event);
14         //System.out.println();
15     }
16 }
複製程式碼

測試結果

hello spring event!  
the source is:hello  
the address is:[email protected]163.com  
the email's context is:this is a email text!  

相關推薦

Spring事件ApplicationListenerApplicationEvent@EventListener用法

什麼是ApplicationContext?  它是spring的核心,Context我們通常解釋為上下文環境,但是理解成容器會更好些。  ApplicationContext則是應用的容器。 Spring把Bean(object)放在容器中,需要用就通過get方法取出來。 ApplicationEven

Spring事件 ApplicationListener ApplicationEvent 用法呼叫過程詳解

ApplicationListener呼叫過程詳解: https://blog.csdn.net/u014263388/article/details/78996509 使用場景 在一些業務場景中,當容器初始化完成之後,需要處理一些操作,比如一些資料的載入、初始化快取、特定任務的註冊等等。這

Spring事件 ApplicationListener ApplicationEvent 用法

scan bsp string bject wired static final HA AD spring事件(application event)為Bean與Bean之間的消息通信添加了支持,當一個Bean處理完一個任務之後,希望另一個Bean知道並能做相應的處理,這時我

SpringApplicationListener

import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; importorg.springframewo

springboot---ApplicationListenerApplicationEvent簡單使用

監聽ApplicationListener和ApplicationEvent簡單使用 本來想實現一個功能就是,在登入成功之後,將一些使用者的資訊,放入到session裡面,本來想,在登入介面成功回撥之後,在寫,但是想做一個監聽的動作,監聽著登入成功的介面,之後走到監聽函式裡面,進行業務處理。

JavaScript之事件概念事件

scrip isp doctype utf itl 技術分享 創建 img ret 1、事件的概念: JavaScript使我們有能力創建動態頁面,網頁中的每一個元素都可以產生某些觸發JavaScript函數的事件。我們可以認為事件是可以被JavaScript偵測到的一種行

JS過渡結束事件使用自定義事件解決兼容問題的方法

定義 inf mage image 過渡 解決 技術分享 分享 img 1.JS過渡結束監聽事件 2.自定義事件解決兼容問題 JS過渡結束監聽事件及使用自定義事件解決兼容問題的方法

javascript頁面重新整理頁面關閉事件方法詳解

在我們的日常生活中,時常遇到這麼一種情況,當我們在點選一個連結、關閉頁面、表單提交時等情況,會提示我們是否確認該操作等資訊。 這裡就給大家講講javascript的onbeforeunload()和onunload()兩個事件。 相同點: 兩者都是在對頁面的關閉或重新整理事件作個操作。

Button一些屬性幾種事件

介紹: TextView與Button是繼承關係,Button繼承自TextView。開發中一般情況下,TextView用來承載靜態文字,Button用來響應點選事件。很多人容易忽略的一點是TextVIew也有點選事件,TextView 繼承自View,點選事件是從View就有的特性,所以Tex

js 事件的疊加移除

  html DOM元素有很多on開頭的監聽事件,如onload、onclick等,見DOM事件列表。但是同一種事件,後面註冊的會覆蓋前面的: window.onresize = function(){ alert(1); } window.onresize = function(){ alert

unity打包webgl程式js鍵盤事件衝突的問題。

最近用unity釋出webgl程式時,出現了一個挺蛋疼的問題就是,webgl裡面的程式他會接受js的鍵盤監聽事件,這樣就導致了webgl程式可以使用出入框,讓後js程式的輸入框就無效了,為了解決這個問題,我也找了一些資料,不過看了以後感覺大部分不能用,後來通過自己研究總結得出了下面的程式碼,親測可用,廢話不多

unity打包webgl程序js鍵盤事件沖突的問題。

apt 初始 types oar document 了解 打包 tlist 判斷 最近用unity發布webgl程序時,出現了一個挺蛋疼的問題就是,webgl裏面的程序他會接受js的鍵盤監聽事件,這樣就導致了webgl程序可以使用出入框,讓後js程序的輸入框就無效了,為了解

事件、ListView的優化使用

一、ListView的優化&使用 ListView的優化:ListView的優化主要包括兩個方面,分別是對自身的優化以及其介面卡(Adapter)的優化。 1、使用ViewHolder模式來提高效率 Viewholder模式充分了ListView的檢視快

安卓實現任意控制元件view可拖拽,並拖拽點選事件,可自動拉回螢幕邊緣

因為專案中有需要實現控制元件可任意拖拽的需求,所以簡單寫了個自定義OnTouchListener,以作拋磚引玉,歡迎大家提議反饋。 完整實現類如下,程式碼中有詳細註釋: 使用者可以決定是否開啟自動拖拽邊緣功能,可以監聽控制元件的拖拽和點選事件 public cl

js/jQery中的鍵盤事件觸發回車鍵位登入觸發教程demo

js/jQery中的鍵盤監聽事件觸發回車鍵位登入觸發教程及demo 在我們專案的過程中經常會遇到需要鍵盤 來控制的事件,比如:登入、搜尋等,廢話不多說上程式碼!! 我這裡主要是做了兩個的監聽,一個是回車的,一個是通用複製的, 可以在判斷中寫入方法體來控制 <script

EditText輸入完成設定點選事件時與父控制元件的衝突問題

最近在做專案時,發現一個問題,最後找到了解決辦法,特在此記錄一下,便於以後自己回憶以及和大家分享 問題描述:我在專案的頁面B放了一個線性佈局,裡面有EditText,本意是從A頁面跳轉到B頁面時,可能會先做別的操作,在修改EditText裡面的內容(闡述一下:

jqueryctrl + c 滑鼠右鍵“複製”事件

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>這裡是測試複製

ButtonImageButton的事件

監聽事件實現的方式: 1、匿名內部類的實現 2、獨立類的實現 3、介面方式實現 一、匿名內部類 通過匿名內部類,直接在Button物件的setOnClickListener的方法中直接n

javascript如何頁面重新整理頁面關閉事件

在我們的日常生活中,時常遇到這麼一種情況,當我們在點選一個連結、關閉頁面、表單提交時等情況,會提示我們是否確認該操作等資訊。 這裡就給大家講講javascript的onbeforeunload()和onunload()兩個事件。 相同點: 兩者都是在對頁面的關閉或重新整理

Spring 初探(五)(Spring Bean 自動裝配與自定義事件

現在通行的使用bean的方法是不通過xml進行配置,而僅僅採用java 內建的類指明bean及相應的依賴關係,下面展開敘述。 @Configuration可以宣告某個類是作為配置類,在這樣的類中 通過@Bean進行修飾的方法可以返回相應的bean類 通過由Annotatio