<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)方式

          共 3010字,需瀏覽 7分鐘

           ·

          2022-01-09 14:06

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

          講到事件監(jiān)聽,這里我們說(shuō)下自定義事件和自定義監(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
          {
          ?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)用啟動(dò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
          {
          ?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
          {
          ?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類,該類無(wú)需實(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)行測(cè)試(在啟動(dòng)類中加入發(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("測(cè)試事件."));
          ?}
          }

          啟動(dòng)后,日志打印如下:

          2018-06-15 10:51:20.198  INFO 4628 ---?[?????????? main] com.listener.MyListener3 ????????????????: com.listener.MyListener3監(jiān)聽到事件源:測(cè)試事件..
          2018-06-15 10:51:20.198 INFO 4628 ---?[?????????? main] com.listener.MyListener4 ????????????????: com.listener.MyListener4監(jiān)聽到事件源:測(cè)試事件..
          2018-06-15 10:51:20.199 INFO 4628 ---?[?????????? main] com.listener.MyListener2 ????????????????: com.listener.MyListener2監(jiān)聽到事件源:測(cè)試事件..
          2018-06-15 10:51:20.199 INFO 4628 ---?[?????????? main] com.listener.MyListener1 ????????????????: com.listener.MyListener1監(jiān)聽到事件源:測(cè)試事件..


          由日志打印可以看出,SpringBoot四種事件的實(shí)現(xiàn)方式監(jiān)聽是有序的


          瀏覽 41
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  男女靠逼网站 | 亚洲成人娱乐网 | 一本色道久久综合狠狠躁小说 | 深爱婷婷| 小黄书在线观看 |