通俗易懂地玩轉Spring框架中的事件訂閱發佈

場景

java開發中有些邏輯是這樣的,完成了A操作,再繼續B操作,在繼續C操作。這麼描述好像有點不清楚。打個比方把,你喫晚飯,通知你老婆(女友)來收碗筷,然後通知你的線上兄弟告訴他們你回來了準備開黑。至於你老婆(女友)來不來收拾無所謂,反正你告訴她了。至於你兄弟你也是通知他們,人家也不一定組你,萬一他們正在跟一個一拖三的carry大佬玩的正起勁兒呢。

事件的概念

喫晚飯就是一個所謂的事件。觸發了隨後的兩個操作,他們只存在因果關係。不存在事務關係。總不能你女友不收拾,你回退到喫飯前的情況吧。所以事件一般適用於沒有事務的操作。如果你真的需要在事件中插入一些事務,該考慮引入一些消息中間件了,比如我之前科普的rabbitmq或者apache 的rocketmq。

spring中的事件玩法

  • 新建一個springboot工程

  • 聲明一個事件。通過繼承org.springframework.context.ApplicationEvent 來編寫事件。時間裏定義好事件推送到監聽器需要執行的方法,當然也可以在監聽器裏寫觸發邏輯。


  • 事件發佈器。發佈事件通過實現 事件發佈接口org.springframework.context.ApplicationEventPublisher 或者其門面接口org.springframework.context.ApplicationEventPublisherAware, 推薦門面接口,裏面要定義一個主動推送事件的方法如下圖的 refreshEvent方法,實際代理了 ApplicationEventPublisher 執行其publishEvent 方法


  • 事件監聽,通過實現 org.springframework.context.ApplicationListener<E extends ApplicationEvent> 來實現事件的監聽。特別注意泛型E,如果不指定事件將可以接收任何事件,儘量職責單一


  • 將上面三個類注入spring 容器中,這裏我們採用了 javaConfig方式,看起來更明顯


這裏就大功告成了,那麼如何使用呢,執行事件發佈器的發佈方法refreshEvent就行了 ,我們來寫一個單元測試


運行一下,入圖


到此你應該就學會使用spring事件了,這樣寫出來的代碼逼格更高。還能提現你對spring的一些理解。相關代碼在我的碼雲倉庫:https://gitee.com/felord/event-spring.git

我是碼農小胖哥,關注我,天天有乾貨。有問題可以留言或者私信,覺得寫的不錯可以點個贊,轉發一下。


本文分享自微信公衆號 - 碼農小胖哥(Felordcn)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章