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

也就是說(shuō)我們只要寫一個(gè)監(jiān)聽器來(lái)實(shí)現(xiàn)ApplicationListener接口,該接口中泛型就是我們要監(jiān)聽的事件,那么如果我們發(fā)布對(duì)應(yīng)的事件,就能在實(shí)現(xiàn)的監(jiān)聽器里面處理。
ApplicationListener作用
主要作用就是來(lái)監(jiān)聽I(yíng)OC容器中發(fā)布的一些事件,只有事件發(fā)送便會(huì)來(lái)觸發(fā)該監(jiān)聽器的回調(diào),從而來(lái)完成事件驅(qū)動(dòng)模型的開發(fā)。
ApplicationListener用法
首先,編寫一個(gè)類來(lái)實(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下面的事件。

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

