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

也就是說我們只要寫一個監(jiān)聽器來實現(xiàn)ApplicationListener接口,該接口中泛型就是我們要監(jiān)聽的事件,那么如果我們發(fā)布對應(yīng)的事件,就能在實現(xiàn)的監(jiān)聽器里面處理。
ApplicationListener作用
主要作用就是來監(jiān)聽IOC容器中發(fā)布的一些事件,只有事件發(fā)送便會來觸發(fā)該監(jiān)聽器的回調(diào),從而來完成事件驅(qū)動模型的開發(fā)。
ApplicationListener用法
首先,編寫一個類來實現(xiàn)ApplicationListener接口,例如MyApplicationListener,這實際上就是寫了一個監(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ā)布此事件以后,下面這個方法就會被觸發(fā)
@Override
public void onApplicationEvent(ApplicationEvent event) {
// TODO Auto-generated method stub
System.out.println("收到事件:" + event);
}
}
測試功能
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();
}
}

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

只不過現(xiàn)在暫時還沒用到容器開始和容器停止這兩個事件而已。
其實,想必你也已經(jīng)猜到了,IOC容器在刷新完成之后便會發(fā)布ContextRefreshedEvent事件,一旦容器關(guān)閉了便會發(fā)布ContextClosedEvent事件。
我們自己來發(fā)布一個事件
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());
}
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring容器的創(chuàng)建過程之如何注冊BeanPostProcessor詳解
關(guān)于BeanPostProcessor 各位一定不陌生,今天整理的這篇文章總結(jié)了如何注冊BeanPostProcessor,文中有非常詳細(xì)的圖文示例,需要的朋友可以參考下2021-06-06
基于java構(gòu)造方法Vector創(chuàng)建對象源碼分析
這篇文章主要介紹了java構(gòu)造函數(shù)中對Vector源碼及原理的分析,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪2021-09-09
idea創(chuàng)建Springboot多模塊項目(聚合項目)
文章詳細(xì)介紹了如何在idea創(chuàng)建Springboot多模塊項目(聚合項目),包括創(chuàng)建父工程和子工程、編輯pom.xml文件、編寫代碼和測試,還介紹了如何處理Maven視圖中的層級關(guān)系,并展示了如何同時啟動多個子項目2024-11-11
Spring Boot中使用RabbitMQ 生產(chǎn)消息和消費消息的實例代碼
本文介紹了在SpringBoot中如何使用RabbitMQ進(jìn)行消息的生產(chǎn)和消費,詳細(xì)闡述了RabbitMQ中交換機的作用和類型,包括直連交換機、主題交換機、扇出交換機和頭交換機,并解釋了各自的消息路由機制,感興趣的朋友一起看看吧2024-10-10
Java實現(xiàn)批量下載(打包成zip)的實現(xiàn)
這篇文章主要介紹了Java實現(xiàn)批量下載(打包成zip)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Spring Boot 2 整合 QuartJob 實現(xiàn)定時器實時管理功能
Quartz是一個完全由java編寫的開源作業(yè)調(diào)度框架,形式簡易,功能強大。接下來通過本文給大家分享Spring Boot 2 整合 QuartJob 實現(xiàn)定時器實時管理功能,感興趣的朋友一起看看吧2019-11-11
解決本機安裝的JDK8,啟動IDEA2019沒反應(yīng)的問題(開發(fā)工具)
這篇文章主要介紹了解決本機安裝的JDK8啟動IDEA2019沒反應(yīng)的問題(開發(fā)工具),非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10

