Spring注解驅(qū)動(dòng)之ApplicationListener用法解讀
ApplicationListener概述
ApplicationListener按照字面意思,它應(yīng)該是Spring里面的應(yīng)用監(jiān)聽器,也就是Spring為我們提供的基于事件驅(qū)動(dòng)開發(fā)的功能。

也就是說我們只要寫一個(gè)監(jiān)聽器來實(shí)現(xiàn)ApplicationListener接口,該接口中泛型就是我們要監(jiān)聽的事件,那么如果我們發(fā)布對(duì)應(yīng)的事件,就能在實(shí)現(xiàn)的監(jiān)聽器里面處理。
ApplicationListener作用
主要作用就是來監(jiān)聽IOC容器中發(fā)布的一些事件,只有事件發(fā)送便會(huì)來觸發(fā)該監(jiān)聽器的回調(diào),從而來完成事件驅(qū)動(dòng)模型的開發(fā)。
ApplicationListener用法
首先,編寫一個(gè)類來實(shí)現(xiàn)ApplicationListener接口,例如MyApplicationListener,這實(shí)際上就是寫了一個(gè)監(jiān)聽器。
package com.meimeixia.ext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
// 當(dāng)然了,監(jiān)聽器這東西要工作,我們還得把它添加在容器中
@Component
public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {
// 當(dāng)容器中發(fā)布此事件以后,下面這個(gè)方法就會(huì)被觸發(fā)
@Override
public void onApplicationEvent(ApplicationEvent event) {
// TODO Auto-generated method stub
System.out.println("收到事件:" + event);
}
}
測(cè)試功能
package com.meimeixia.test;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.meimeixia.ext.ExtConfig;
public class IOCTest_Ext {
@Test
public void test01() {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ExtConfig.class);
// 關(guān)閉容器
applicationContext.close();
}
}

可以看到我們收到了兩個(gè)事件,這兩個(gè)事件分別是
org.springframework.context.event.ContextRefreshedEvent和org.springframework.context.event.ContextClosedEvent
其中第一個(gè)是容器已經(jīng)刷新完成事件,第二個(gè)是容器關(guān)閉事件。
而且,從下圖中可以看到,這兩個(gè)事件都是ApplicationEvent下面的事件。

只不過現(xiàn)在暫時(shí)還沒用到容器開始和容器停止這兩個(gè)事件而已。
其實(shí),想必你也已經(jīng)猜到了,IOC容器在刷新完成之后便會(huì)發(fā)布ContextRefreshedEvent事件,一旦容器關(guān)閉了便會(huì)發(fā)布ContextClosedEvent事件。
我們自己來發(fā)布一個(gè)事件
public static void main(String[] args) {
final AnnotationConfigApplicationContext applicationContext
= new AnnotationConfigApplicationContext(ExtConfig.class);
applicationContext.publishEvent("發(fā)送事件");
applicationContext.close();
}
@Component
public class MyApplicationListener implements ApplicationListener<PayloadApplicationEvent> {
public void onApplicationEvent(PayloadApplicationEvent applicationEvent) {
System.out.println("收到事件:" + applicationEvent);
System.out.println(applicationEvent.getPayload());
}
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java web實(shí)現(xiàn)郵箱激活與忘記密碼
這篇文章主要為大家詳細(xì)介紹了java web實(shí)現(xiàn)郵箱激活與忘記密碼、重置密碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
SpringBoot整合Redis并且用Redis實(shí)現(xiàn)限流的方法 附Redis解壓包
這篇文章主要介紹了SpringBoot整合Redis并且用Redis實(shí)現(xiàn)限流的方法 附Redis解壓包,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
IDEA 如何控制編輯左側(cè)的功能圖標(biāo)ICON(操作步驟)
很多朋友被idea左側(cè)的圖標(biāo)不見了這一問題搞的焦頭爛額,不知道該怎么操作,今天小編就交大家如何控制編輯左側(cè)的功能圖標(biāo) ICON,文字內(nèi)容不多,主要通過兩張截圖給大家說明,感興趣的朋友一起看看吧2021-05-05
SpringMVC統(tǒng)一異常處理實(shí)例代碼
這篇文章主要介紹了SpringMVC統(tǒng)一異常處理實(shí)例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
java中TCP實(shí)現(xiàn)回顯服務(wù)器及客戶端
本文主要介紹了java中TCP實(shí)現(xiàn)回顯服務(wù)器及客戶端,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操
這篇文章主要介紹了JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08

