淺談Spring-boot事件監(jiān)聽
springboot的事件監(jiān)聽:為bean之間的消息通信提供支持。當(dāng)一個(gè)bean做完一件事以后,通知另一個(gè)bean知曉并做出相應(yīng)處理。這時(shí),我們需要另一個(gè)bean,監(jiān)聽當(dāng)前bean所發(fā)生的事件。
實(shí)現(xiàn)步驟:四個(gè)步驟,四種方式
第一種方式
1、自定義事件,一般是繼承ApplicationEvent抽象類
2、定義事件監(jiān)聽器,一般是實(shí)現(xiàn)ApplicationListener接口
3、1)把監(jiān)聽器加入到SpringApplication中:ApplicationListener.addListener();然后發(fā)布事件
2)或放置到spring容器:@Conponent
3)或在application.properties配置文件中配置context.listener.classes=監(jiān)聽器全類名
4)或編寫一個(gè)類,納入spring容器中,編寫一個(gè)帶參的方法,參數(shù)為事件的父類或需要監(jiān)聽的事件,加上@EventListener
4、發(fā)布事件
第一步:自定義事件,繼承ApplicationEvent抽象類
public class MyApplicationEvent extends ApplicationEvent {
public MyApplicationEvent(Object source) {
super(source);
}
}
第二步:自定義事件監(jiān)聽器,實(shí)現(xiàn)ApplicationListener接口
public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> {
@Override
public void onApplicationEvent(MyApplicationEvent myApplicationEvent) {
System.out.println(myApplicationEvent.getClass().getName() + "被監(jiān)聽......");
}
}
第三、四步:把監(jiān)聽器加入spring中,然后發(fā)布事件
@SpringBootApplication
public class BlogApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(BlogApplication.class, args);
//把監(jiān)聽器加入到SpringApplication中
context.addApplicationListener(new MyApplicationListener());
//發(fā)布事件
context.publishEvent(new MyApplicationEvent(new Object()));
context.close();
}
}

第二種方式:換一種方式將監(jiān)聽器加入spring容器中(只需修改BlogApplication)

通過@component注解,將監(jiān)聽器加入spring容器中

BlogApplication.class
第三種方式:在application.properties配置文件中配置context.listener.classes=監(jiān)聽器全類名

spring.properties
第四種方式:編寫一個(gè)類MyEventHandler,替代上文中的MyApplicationListener,將其納入spring容器中,編寫一個(gè)帶參的方法,參數(shù)為事件的父類或需要監(jiān)聽的事件,加上@EventListener。(參數(shù)的范圍越廣泛,監(jiān)聽到的事件越多)

MyEventHandler.class
至此,springboot的四種事件監(jiān)聽方式就介紹完畢啦~,以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis綁定錯(cuò)誤提示BindingException:Invalid bound statement (not f
這篇文章主要介紹了MyBatis綁定錯(cuò)誤提示BindingException:Invalid bound statement (not found)的解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-01-01
java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別
這篇文章主要介紹了java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
springboot 微信授權(quán)網(wǎng)頁登錄操作流程
這篇文章主要介紹了springboot 微信授權(quán)網(wǎng)頁登錄操作流程,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Java如何獲取Json中的數(shù)據(jù)實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于Java如何獲取Json中數(shù)據(jù)的相關(guān)資料,我們?cè)谌粘i_發(fā)中少不了和JSON數(shù)據(jù)打交道,那么我們來看看JAVA中常用的JSON獲取方式,需要的朋友可以參考下2023-09-09
詳解在SpringBoot應(yīng)用中獲取應(yīng)用上下文方法
本篇文章主要介紹了詳解在SpringBoot應(yīng)用中獲取應(yīng)用上下文方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
Java通過XPath獲取XML文件中符合特定條件的節(jié)點(diǎn)
今天小編就為大家分享一篇關(guān)于Java通過XPath獲取XML文件中符合特定條件的節(jié)點(diǎn),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
java將數(shù)字價(jià)格轉(zhuǎn)換為中文大寫代碼示例(工具類)
這篇文章主要介紹了java將數(shù)字價(jià)格轉(zhuǎn)換為中文大寫的相關(guān)資料,在Java中實(shí)現(xiàn)將數(shù)字價(jià)格轉(zhuǎn)換為中文大寫需要將數(shù)字分解為各個(gè)部分(如個(gè)位、十位、百位等),并根據(jù)這些部分轉(zhuǎn)換為對(duì)應(yīng)的中文大寫數(shù)字,需要的朋友可以參考下2024-10-10
springboot攔截器Interceptor的使用,你都了解嗎
springmvc 中的攔截器可以對(duì)請(qǐng)求進(jìn)行判別,在請(qǐng)求到達(dá)控制器之前,把非法的請(qǐng)求給攔截掉下面來說一說, 它在springboot中的使用,感興趣的朋友一起看看吧2021-07-07

