<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot事件監(jiān)聽的4種實現(xiàn)方式

          共 3414字,需瀏覽 7分鐘

           ·

          2021-12-18 16:17

          程序員的成長之路
          互聯(lián)網(wǎng)/程序員/技術/資料共享?
          關注


          閱讀本文大概需要 2.8 分鐘。

          來自:blog.csdn.net/ignorewho/article/details/80702827

          springboot進行事件監(jiān)聽有四種方式:
          1. 手工向ApplicationContext中添加監(jiān)聽器
          2. 將監(jiān)聽器裝載入spring容器
          3. 在application.properties中配置監(jiān)聽器
          4. 通過@EventListener注解實現(xiàn)事件監(jiān)聽
          講到事件監(jiān)聽,這里我們說下自定義事件和自定義監(jiān)聽器類的實現(xiàn)方式:
          • 自定義事件:繼承自ApplicationEvent抽象類,然后定義自己的構造器
          • 自定義監(jiān)聽:實現(xiàn)ApplicationListener接口,然后實現(xiàn)onApplicationEvent方法
          下面講下4種事件監(jiān)聽的具體實現(xiàn)

          方式1

          首先創(chuàng)建MyListener1類
          public?class?MyListener1?implements?ApplicationListener<MyEvent>
          {
          ?Logger?logger?=?Logger.getLogger(MyListener1.class);
          ?
          ?public?void?onApplicationEvent(MyEvent?event)
          ?
          {
          ??logger.info(String.format("%s監(jiān)聽到事件源:%s.",?MyListener1.class.getName(),?event.getSource()));
          ?}
          }
          然后在springboot應用啟動類中獲取ConfigurableApplicationContext上下文,裝載監(jiān)聽
          @SpringBootApplication
          public?class?LisenterApplication
          {
          ?public?static?void?main(String[]?args)
          ?
          {
          ??ConfigurableApplicationContext?context?=?SpringApplication.run(LisenterApplication.class,?args);
          ??//裝載監(jiān)聽
          ??context.addApplicationListener(new?MyListener1());
          ?}
          }

          方式2

          創(chuàng)建MyListener2類,并使用@Component注解將該類裝載入spring容器中
          @Component
          public?class?MyListener2?implements?ApplicationListener<MyEvent>
          {
          ?Logger?logger?=?Logger.getLogger(MyListener2.class);
          ?
          ?public?void?onApplicationEvent(MyEvent?event)
          ?
          {
          ??logger.info(String.format("%s監(jiān)聽到事件源:%s.",?MyListener2.class.getName(),?event.getSource()));
          ?}
          }

          方式3

          首先創(chuàng)建MyListener3類
          public?class?MyListener3?implements?ApplicationListener<MyEvent>
          {
          ?Logger?logger?=?Logger.getLogger(MyListener3.class);
          ?
          ?public?void?onApplicationEvent(MyEvent?event)
          ?
          {
          ??logger.info(String.format("%s監(jiān)聽到事件源:%s.",?MyListener3.class.getName(),?event.getSource()));
          ?}
          }
          然后在application.properties中配置監(jiān)聽
          context.listener.classes=com.listener.MyListener3

          方式4

          創(chuàng)建MyListener4類,該類無需實現(xiàn)ApplicationListener接口,使用@EventListener裝飾具體方法
          @Component
          public?class?MyListener4
          {
          ?Logger?logger?=?Logger.getLogger(MyListener4.class);
          ?
          ?@EventListener
          ?public?void?listener(MyEvent?event)
          ?
          {
          ??logger.info(String.format("%s監(jiān)聽到事件源:%s.",?MyListener4.class.getName(),?event.getSource()));
          ?}
          }
          自定義事件代碼如下:
          @SuppressWarnings("serial")
          public?class?MyEvent?extends?ApplicationEvent
          {
          ?public?MyEvent(Object?source)
          ?
          {
          ??super(source);
          ?}
          }
          進行測試(在啟動類中加入發(fā)布事件的邏輯):
          @SpringBootApplication
          public?class?LisenterApplication
          {
          ?public?static?void?main(String[]?args)
          ?
          {
          ??ConfigurableApplicationContext?context?=?SpringApplication.run(LisenterApplication.class,?args);
          ??//裝載事件
          ??context.addApplicationListener(new?MyListener1());
          ??//發(fā)布事件
          ??context.publishEvent(new?MyEvent("測試事件."));
          ?}
          }
          啟動后,日志打印如下:
          2018-06-15 10:51:20.198 INFO 4628 ---?[?????????? main] com.listener.MyListener3 ????????????????: com.listener.MyListener3監(jiān)聽到事件源:測試事件..
          2018-06-15 10:51:20.198 INFO 4628 ---?[?????????? main] com.listener.MyListener4 ????????????????: com.listener.MyListener4監(jiān)聽到事件源:測試事件..
          2018-06-15 10:51:20.199 INFO 4628 ---?[?????????? main] com.listener.MyListener2 ????????????????: com.listener.MyListener2監(jiān)聽到事件源:測試事件..
          2018-06-15 10:51:20.199 INFO 4628 ---?[?????????? main] com.listener.MyListener1 ????????????????: com.listener.MyListener1監(jiān)聽到事件源:測試事件..
          由日志打印可以看出,SpringBoot四種事件的實現(xiàn)方式監(jiān)聽是有序的
          完整的代碼路徑:
          https://github.com/ingorewho/springboot-develope/tree/master/springboot-listener
          推薦閱讀:

          手把手復現(xiàn)了 Log4j2 漏洞,太可怕了。。

          終于實現(xiàn)了 SpringBoot+WebSocket實時監(jiān)控異常....

          互聯(lián)網(wǎng)初中高級大廠面試題(9個G)

          內(nèi)容包含Java基礎、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務、Zookeeper、數(shù)據(jù)結構、限流熔斷降級......等技術棧!

          ?戳閱讀原文領取!? ? ? ? ? ? ? ??? ??? ? ? ? ? ? ? ? ? ?朕已閱?

          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91九啦| 台湾无码黄片 | 阴茎插入阴道内的欧美视频网站 | 美女自慰喷水网站 | 美女操逼视频在线观看 |