Spring注解驅(qū)動(dòng)之ApplicationListener用法解讀
ApplicationListener概述
ApplicationListener按照字面意思,它應(yīng)該是Spring里面的應(yīng)用監(jiān)聽(tīng)器,也就是Spring為我們提供的基于事件驅(qū)動(dòng)開(kāi)發(fā)的功能。
也就是說(shuō)我們只要寫(xiě)一個(gè)監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)ApplicationListener接口,該接口中泛型就是我們要監(jiān)聽(tīng)的事件,那么如果我們發(fā)布對(duì)應(yīng)的事件,就能在實(shí)現(xiàn)的監(jiān)聽(tīng)器里面處理。
ApplicationListener作用
主要作用就是來(lái)監(jiān)聽(tīng)I(yíng)OC容器中發(fā)布的一些事件,只有事件發(fā)送便會(huì)來(lái)觸發(fā)該監(jiān)聽(tīng)器的回調(diào),從而來(lái)完成事件驅(qū)動(dòng)模型的開(kāi)發(fā)。
ApplicationListener用法
首先,編寫(xiě)一個(gè)類(lèi)來(lái)實(shí)現(xiàn)ApplicationListener接口,例如MyApplicationListener,這實(shí)際上就是寫(xiě)了一個(gè)監(jiān)聽(tīng)器。
package com.meimeixia.ext; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; // 當(dāng)然了,監(jiān)聽(tīng)器這東西要工作,我們還得把它添加在容器中 @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)用到容器開(kā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)文章
java web實(shí)現(xiàn)郵箱激活與忘記密碼
這篇文章主要為大家詳細(xì)介紹了java web實(shí)現(xiàn)郵箱激活與忘記密碼、重置密碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02SpringBoot整合Redis并且用Redis實(shí)現(xiàn)限流的方法 附Redis解壓包
這篇文章主要介紹了SpringBoot整合Redis并且用Redis實(shí)現(xiàn)限流的方法 附Redis解壓包,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06IDEA 如何控制編輯左側(cè)的功能圖標(biāo)ICON(操作步驟)
很多朋友被idea左側(cè)的圖標(biāo)不見(jiàn)了這一問(wèn)題搞的焦頭爛額,不知道該怎么操作,今天小編就交大家如何控制編輯左側(cè)的功能圖標(biāo) ICON,文字內(nèi)容不多,主要通過(guò)兩張截圖給大家說(shuō)明,感興趣的朋友一起看看吧2021-05-05SpringMVC統(tǒng)一異常處理實(shí)例代碼
這篇文章主要介紹了SpringMVC統(tǒng)一異常處理實(shí)例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11java中TCP實(shí)現(xiàn)回顯服務(wù)器及客戶(hù)端
本文主要介紹了java中TCP實(shí)現(xiàn)回顯服務(wù)器及客戶(hù)端,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操
這篇文章主要介紹了JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08