<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>

          3 分鐘快速上手 Spring 事件機(jī)制

          共 1498字,需瀏覽 3分鐘

           ·

          2022-07-23 15:01

          小伙伴們好呀~ 今天來(lái)和大家分享下這個(gè) Spring事件機(jī)制

          內(nèi)容概覽

          image-20210829132019387

          原理

          image-20210828184103069

          這個(gè)熟悉 觀察者模式 的小伙伴應(yīng)該一眼就看出來(lái)啦~

          其實(shí)就是個(gè)簡(jiǎn)單版的 發(fā)布-訂閱模式

          有三個(gè)核心類??

          1. 事件 ApplicationEvent
          2. 事件發(fā)布器 ApplicationEventPublisher
          3. 事件監(jiān)聽(tīng)器 ApplicationListener

          用途??

          事件發(fā)布器發(fā)布事件,監(jiān)聽(tīng)器監(jiān)聽(tīng)到對(duì)應(yīng)的事件后做出相應(yīng)的反應(yīng)~

          為什么使用

          因?yàn)樾枨笠膊淮_定 ??

          場(chǎng)景

          領(lǐng)導(dǎo):想在用戶操作完后發(fā)個(gè)郵件通知下A

          我:好的

          幾天后……

          領(lǐng)導(dǎo):算了,先站內(nèi)提醒就好了,后面再考慮發(fā)短信通知啥的,看看哪個(gè)效果好點(diǎn)

          我:……好的

          一開(kāi)始我也沒(méi)用這個(gè)事件機(jī)制的,沒(méi)多想就寫(xiě)一起了

          后面覺(jué)得有點(diǎn)不對(duì)勁,才想起來(lái)用這招的??

          優(yōu)點(diǎn)??

          1. 解耦 可以將業(yè)務(wù)代碼和發(fā)郵件,站內(nèi)提醒,短信等進(jìn)行分離
          2. 異步通知 不用等待這些事件的完成
          3. 提高擴(kuò)展性 后面再擴(kuò)展其他操作也方便多啦

          提醒

          體量小的系統(tǒng)還可以用,大點(diǎn)的還是直接用消息中間件去解決靠譜

          項(xiàng)目實(shí)戰(zhàn)

          image-20210829102043376

          功能

          根據(jù)小伙伴反饋事件去發(fā)送短信和郵件

          主要源碼

          一. 小伙伴反饋事件 ReaderFeedbackEvent

          image-20210829094311899

          特點(diǎn)和作用??

          繼承 ApplicationEvent ,保存反饋信息的DTO

          二. 事件發(fā)布器 ReaderFeedbackEventPublisher

          image-20210829102353506

          特點(diǎn)和作用??

          實(shí)現(xiàn) ApplicationEventPublisherAware 這個(gè)接口,獲取 ApplicationEventPublisher 事件發(fā)布器去發(fā)布事件

          三. 監(jiān)聽(tīng) ReaderFeedbackEvent 事件并發(fā)送郵件

          image-20210829102540185

          特點(diǎn)和作用??

          實(shí)現(xiàn) ApplicationListener 這個(gè)接口,獲取事件中的反饋信息,并發(fā)送郵件

          四. 當(dāng)反饋信息有點(diǎn)贊時(shí)才發(fā)送短信通知??

          image-20210829102736577

          特點(diǎn)和作用??

          監(jiān)聽(tīng)器的第二種寫(xiě)法—— 注解 ,比較方便,這里監(jiān)聽(tīng)并判斷是不是點(diǎn)贊,再去發(fā)送短信??

          測(cè)試

          這里直接在 IDEA 中進(jìn)行測(cè)試,

          image-20210829111125716

          效果如下??

          like = false

          image-20210829111409325

          like = true

          image-20210829124910499

          收到的短信

          小結(jié)

          可以看到功能模塊很簡(jiǎn)單,監(jiān)聽(tīng)反饋事件,然后去發(fā)送短信和郵件~

          image-20210829130532523

          這部分代碼上傳到我的 GitHub 倉(cāng)庫(kù)啦 (地址在文末)??

          Spring源碼解讀

          異步/同步

          這里我們打個(gè)斷點(diǎn),就可以輕易的來(lái)到這里啦 ??

          image-20210829104327436

          這個(gè)方法在事件多播器 SimpleApplicationEventMulticaster 中,可以看到當(dāng)有配置這個(gè)線程池時(shí),是走異步通知路線的

          那怎么調(diào)用監(jiān)聽(tīng)器的呢?

          可以看到就這簡(jiǎn)單3步 ,最后就是回到我們的 onApplicationEvent 方法中去處理的

          invokeListener ——> doInvokeListener ——> onApplicationEvent

          image-20210829104759111

          最后

          活學(xué)活用,快去試試叭!??

          本期思維導(dǎo)圖如下??

          image-20210829132531501
          瀏覽 48
          點(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>
                  日韩毛片在线免费观看 | 亚洲IV秘 一区二区三区 | 一区二区三区四区元码 | 天天干天天日麻豆 | 影音先锋成人无码在线观看 |