淺談Spring-boot事件監(jiān)聽(tīng)
springboot的事件監(jiān)聽(tīng):為bean之間的消息通信提供支持。當(dāng)一個(gè)bean做完一件事以后,通知另一個(gè)bean知曉并做出相應(yīng)處理。這時(shí),我們需要另一個(gè)bean,監(jiān)聽(tīng)當(dāng)前bean所發(fā)生的事件。
實(shí)現(xiàn)步驟:四個(gè)步驟,四種方式
第一種方式
1、自定義事件,一般是繼承ApplicationEvent抽象類(lèi)
2、定義事件監(jiān)聽(tīng)器,一般是實(shí)現(xiàn)ApplicationListener接口
3、1)把監(jiān)聽(tīng)器加入到SpringApplication中:ApplicationListener.addListener();然后發(fā)布事件
2)或放置到spring容器:@Conponent
3)或在application.properties配置文件中配置context.listener.classes=監(jiān)聽(tīng)器全類(lèi)名
4)或編寫(xiě)一個(gè)類(lèi),納入spring容器中,編寫(xiě)一個(gè)帶參的方法,參數(shù)為事件的父類(lèi)或需要監(jiān)聽(tīng)的事件,加上@EventListener
4、發(fā)布事件
第一步:自定義事件,繼承ApplicationEvent抽象類(lèi)
public class MyApplicationEvent extends ApplicationEvent { public MyApplicationEvent(Object source) { super(source); } }
第二步:自定義事件監(jiān)聽(tīng)器,實(shí)現(xiàn)ApplicationListener接口
public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> { @Override public void onApplicationEvent(MyApplicationEvent myApplicationEvent) { System.out.println(myApplicationEvent.getClass().getName() + "被監(jiān)聽(tīng)......"); } }
第三、四步:把監(jiān)聽(tīng)器加入spring中,然后發(fā)布事件
@SpringBootApplication public class BlogApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(BlogApplication.class, args); //把監(jiān)聽(tīng)器加入到SpringApplication中 context.addApplicationListener(new MyApplicationListener()); //發(fā)布事件 context.publishEvent(new MyApplicationEvent(new Object())); context.close(); } }
第二種方式:換一種方式將監(jiān)聽(tīng)器加入spring容器中(只需修改BlogApplication)
通過(guò)@component注解,將監(jiān)聽(tīng)器加入spring容器中
BlogApplication.class
第三種方式:在application.properties配置文件中配置context.listener.classes=監(jiān)聽(tīng)器全類(lèi)名
spring.properties
第四種方式:編寫(xiě)一個(gè)類(lèi)MyEventHandler,替代上文中的MyApplicationListener,將其納入spring容器中,編寫(xiě)一個(gè)帶參的方法,參數(shù)為事件的父類(lèi)或需要監(jiān)聽(tīng)的事件,加上@EventListener。(參數(shù)的范圍越廣泛,監(jiān)聽(tīng)到的事件越多)
MyEventHandler.class
至此,springboot的四種事件監(jiān)聽(tīng)方式就介紹完畢啦~,以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)map轉(zhuǎn)換成json的方法詳解
這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言實(shí)現(xiàn)map轉(zhuǎn)換成json的幾種方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下2022-05-05關(guān)于@ConditionalOnProperty的作用及用法說(shuō)明
這篇文章主要介紹了關(guān)于@ConditionalOnProperty的作用及用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Java實(shí)現(xiàn)的自定義類(lèi)加載器示例
這篇文章主要介紹了Java實(shí)現(xiàn)的自定義類(lèi)加載器,結(jié)合具體實(shí)例形式分析了java自定義類(lèi)加載器的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-07-07SpringBoot 如何實(shí)現(xiàn)異步編程
在SpringBoot的日常開(kāi)發(fā)中,一般都是同步調(diào)用的,但實(shí)際中有很多場(chǎng)景非常適合使用異步來(lái)處理,本文就詳細(xì)的介紹一下SpringBoot 如何實(shí)現(xiàn)異步編程 ,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12解決在IDEA下使用JUnit的問(wèn)題(解決過(guò)程)
很多朋友跟小編反饋在IDEA下使用JUnit進(jìn)行實(shí)例測(cè)試的時(shí)候出現(xiàn)很多奇葩問(wèn)題,今天小編通過(guò)本文給大家分享idea使用JUnit出現(xiàn)問(wèn)題及解決過(guò)程,感興趣的朋友跟隨小編一起看看吧2021-05-05