下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Spring注解驅(qū)動(dòng)之@EventListener注解使用方式目錄概述@EventListener注解的用法@EventListener注解的原理
概述
之前我們說過可以通過實(shí)現(xiàn)ApplicationListener接口來監(jiān)聽處理事件。
其實(shí)還有一種注解方式來監(jiān)聽處理事件。即使用@EventListener注解,通過該注解就可以在方法上監(jiān)聽事件了。
這樣普通的業(yè)務(wù)邏輯組件中就可以直接使用這個(gè)注解來監(jiān)聽事件了,無需實(shí)現(xiàn)ApplicationListener接口了,確實(shí)比較方便,但是其原理是和ApplicationListener接口一樣的,也可以自定義一個(gè)多波器實(shí)現(xiàn)異步監(jiān)聽事件,定義方法與之前一致。Spring注解驅(qū)動(dòng)之ApplicationListener異步處理事件
@EventListener注解的用法
首先,編寫一個(gè)普通的業(yè)務(wù)邏輯組件,例如UserService,并在該組件上標(biāo)注一個(gè)@Service注解。
我們只需要簡(jiǎn)單的在該方法上標(biāo)注一個(gè)@EventListener注解,就可以讓方法來監(jiān)聽事件了??梢酝ㄟ^注解的classes屬性來指定需要監(jiān)聽的事件。
例如,我們可以讓listen方法監(jiān)聽ApplicationEvent及其子事件。
最后我們?cè)趨?shù)的位置上寫一個(gè)ApplicationEvent參數(shù)來接收事件,參數(shù)值是在Spring框架調(diào)用的時(shí)候自動(dòng)賦值的。
packagecom.meimeixia.ext;
importorg.springframework.context.ApplicationEvent;
importorg.springframework.context.event.EventListener;
importorg.springframework.stereotype.Service;
@Service
publicclassUserService{
//一些其他的方法...
@EventListener(classes=ApplicationEvent.class)
publicvoidlisten(ApplicationEventevent){
System.out.println("UserService...監(jiān)聽到的事件:"+event);
寫個(gè)測(cè)試用例。
packagecom.meimeixia.test;
importorg.junit.Test;
importorg.springframework.context.ApplicationEvent;
importorg.springframework.context.annotation.AnnotationConfigApplicationContext;
importcom.meimeixia.ext.ExtConfig;
publicclassIOCTest_Ext{
@Test
publicvoidtest01(){
AnnotationConfigApplicationContextapplicationContext=newAnnotationConfigApplicationContext(ExtConfig.class);
//發(fā)布一個(gè)事件
applicationContext.publishEvent(newApplicationEvent(newString("我發(fā)布的事件")){
//關(guān)閉容器
applicationContext.close();
你會(huì)發(fā)現(xiàn)Eclipse控制臺(tái)打印出了如下內(nèi)容,可以清晰地看到,不僅我們之前編寫的監(jiān)聽器(例如MyApplicationListener)收到了事件,而且UserService組件也收到了事件。
也就是說,每一個(gè)都能正確地收到事件。
@EventListener注解的原理
我們可以點(diǎn)進(jìn)去@EventListener這個(gè)注解里面去看一看,如下圖所示,可以看到這個(gè)注解上面有一大堆的描述,從描述中我們可以猜到這個(gè)注解的內(nèi)部工作原理。
描述中有一個(gè)醒目的字眼,即參考EventListenerMethodProcessor。意思可能是說,如果你想搞清楚@EventListener注解的內(nèi)部工作原理,那么可以參考EventListenerMethodProcessor這個(gè)類。
EventListenerMethodProcessor是一個(gè)處理器,其作用是來解析方法上的@EventListener注解的。
這也就是說,Spring會(huì)使用EventListenerMethodProcessor來解析方法上的@EventListener注解。
因此,搞清楚這個(gè)處理器是怎樣工作的,就搞清楚了@EventListener注解的內(nèi)部工作原理。
仔細(xì)看一下SmartInitializingSingleton接口中afterSingletonsInstantiated方法上面的描述信息,不難看出該方法是在所有的單實(shí)例bean已經(jīng)全部被創(chuàng)建完了以后才會(huì)被執(zhí)行。
在介紹SmartInitializingSingleton接口的時(shí)候,我們也能從描述信息中知道,在所有的單實(shí)例bean已經(jīng)全部被創(chuàng)建完成以后才會(huì)觸發(fā)該接口。緊接著下面一段的描述還說了,該接口的調(diào)用時(shí)機(jī)有點(diǎn)類似于ContextRefreshedEvent事件,即在容器刷新完成以后,便會(huì)回調(diào)該接口。也就是說,這個(gè)時(shí)候容器已經(jīng)創(chuàng)建完了。
如果所有的單實(shí)例bean都已經(jīng)創(chuàng)建完了,也就是說下面這一步都執(zhí)行完了,那么說明IOC容器已經(jīng)創(chuàng)建完成了。
緊接著便會(huì)來調(diào)用finishRefresh方法,容器已經(jīng)創(chuàng)建完了,此時(shí)就會(huì)來發(fā)布容器已經(jīng)刷新完成的事件。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 18384-2025電動(dòng)汽車安全要求
- 五年級(jí)上冊(cè)語文試卷及答案
- 衛(wèi)生招聘題庫及答案
- 過程裝備控制技術(shù)與應(yīng)用
- 部編版2021年四年級(jí)語文上冊(cè)期末測(cè)試卷【附答案】
- 淺析中職衛(wèi)校醫(yī)護(hù)生英語學(xué)習(xí)難點(diǎn)及應(yīng)對(duì)途徑
- 腳氣科普課件
- 2022-2023年人教版三年級(jí)語文下冊(cè)期中測(cè)試卷及答案【審定版】
- 電氣測(cè)量技術(shù)要領(lǐng)
- 申論考試題目分析及答案
- 南京醫(yī)科大學(xué)2026年招聘人事代理人員備考題庫及1套參考答案詳解
- 2026年教育平臺(tái)資源輸出協(xié)議
- 【《四旋翼飛行器坐標(biāo)系及相互轉(zhuǎn)換關(guān)系分析綜述》1000字】
- 2026浙江金華市婺城區(qū)城市發(fā)展控股集團(tuán)有限公司招聘59人筆試參考題庫及答案解析
- 靜脈補(bǔ)液課件
- 廣東深圳市鹽田高級(jí)中學(xué)2024~2025學(xué)年高一上冊(cè)1月期末考試化學(xué)試題 附答案
- 2026年輔警招聘考試試題庫附答案【完整版】
- 建筑施工風(fēng)險(xiǎn)辨識(shí)與防范措施
- 浙江省杭州地區(qū)六校2026屆化學(xué)高一第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 2025年CFA二級(jí)估值與財(cái)務(wù)報(bào)表分析試卷(含答案)
- 2025年宜昌化學(xué)真題試卷及答案
評(píng)論
0/150
提交評(píng)論