1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 3278字,需瀏覽 7分鐘

         ·

        2022-03-16 08:06

        不點藍字關注,我們哪來故事?


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

        點這里去了解,劍指大廠吧!







        來源: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抽象類,然后定義自己的構(gòu)造器
        • 自定義監(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)聽是有序的


        推薦


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

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


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

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日本二级黄免费在线观看 | 奇米色狠狠干 | 亚洲卡一卡2卡3卡5卡6在线99 | XX视频 | 国产理论在线 | 三级片在线观看中文字幕 | 欧美做爱视频在线 | 黑人大鸡吧视频 | 国产精品黄片视频 | 高清操逼视频 |