<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 種實(shí)現(xiàn)方式

          共 3278字,需瀏覽 7分鐘

           ·

          2022-03-16 08:06

          不點(diǎn)藍(lán)字關(guān)注,我們哪來故事?


          一個(gè)指導(dǎo)程序員進(jìn)入大公司/獨(dú)角獸?的精品社群,致力于分享職場達(dá)人的專業(yè)打法,包括「學(xué)習(xí)路線+簡歷模板+實(shí)習(xí)避坑+筆試面試+試用轉(zhuǎn)正+升職加薪+跳槽技巧」。

          點(diǎn)這里去了解,劍指大廠吧!







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


          springboot進(jìn)行事件監(jiān)聽有四種方式:
          1. 手工向ApplicationContext中添加監(jiān)聽器
          2. 將監(jiān)聽器裝載入spring容器
          3. 在application.properties中配置監(jiān)聽器
          4. 通過@EventListener注解實(shí)現(xiàn)事件監(jiān)聽

          講到事件監(jiān)聽,這里我們說下自定義事件和自定義監(jiān)聽器類的實(shí)現(xiàn)方式:

          • 自定義事件:繼承自ApplicationEvent抽象類,然后定義自己的構(gòu)造器
          • 自定義監(jiān)聽:實(shí)現(xiàn)ApplicationListener接口,然后實(shí)現(xiàn)onApplicationEvent方法

          下面講下4種事件監(jiān)聽的具體實(shí)現(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應(yīng)用啟動類中獲取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類,該類無需實(shí)現(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);
          ?}
          }

          進(jìn)行測試(在啟動類中加入發(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四種事件的實(shí)現(xiàn)方式監(jiān)聽是有序的


          推薦


          歡迎加入我的知識星球,一起劍指大廠,不斷晉升加薪。

          劍指大廠不僅是一個(gè)獲取信息的圈子,還是一個(gè)規(guī)劃職業(yè)的導(dǎo)師。已在知識星球,更新如下點(diǎn)這里去了解,劍指大廠吧!或點(diǎn)擊下圖了解):


          //////?END?//////
          ↓ 點(diǎn)擊下方關(guān)注,看更多架構(gòu)分享?↓
          瀏覽 45
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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综合一 | 国产又黄又粗视频 | 逼逼精品 | 亚洲无吗| 亚洲无码爱爱视频 |