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)文章
SpringBoot整合Redis并且用Redis實現(xiàn)限流的方法 附Redis解壓包
這篇文章主要介紹了SpringBoot整合Redis并且用Redis實現(xiàn)限流的方法 附Redis解壓包,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-06-06IDEA 如何控制編輯左側(cè)的功能圖標(biāo)ICON(操作步驟)
很多朋友被idea左側(cè)的圖標(biāo)不見了這一問題搞的焦頭爛額,不知道該怎么操作,今天小編就交大家如何控制編輯左側(cè)的功能圖標(biāo) ICON,文字內(nèi)容不多,主要通過兩張截圖給大家說明,感興趣的朋友一起看看吧2021-05-05JAVA8 List<List<Integer>> list中再裝一個list轉(zhuǎn)成一個list操
這篇文章主要介紹了JAVA8 List<List<Integer>> list中再裝一個list轉(zhuǎn)成一個list操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08