【SpringBoot】解析Springboot事件機制,事件發布和監聽

解析Springboot事件機制,事件發布和監聽

  • 一、Spring的事件是什么
  • 二、使用步驟
    • 2.1 依賴處理
    • 2.2 定義事件實體類
    • 2.3 定義事件監聽類
    • 2.4 事件發布
  • 三、異步調用
    • 3.1 啟用異步調用
    • 3.2 監聽器方法上添加 @Async 注解

一、Spring的事件是什么

Spring的事件監聽(也叫事件驅動)(Application Event)為Bean與Bean之間的消息通信提供了支持,是觀察者模式的一種實現,只要是觀察者模式,就含有主題(針對該主題的事件),發布者(發布主題或事件),訂閱者(監聽主題的人)。有三個部分組成,事件(ApplicationEvent)、監聽器(ApplicationListener)和事件發布操作。

它的作用:使用事件機制我們可以將相互耦合的代碼解耦,從而方便功能拓展和調整。

事件機制中有三種角色:發布事件者、事件、事件監聽者

  • 發布事件者:發布事件的對象
  • 事件:事件的具體內容
  • 事件監聽者:等待處理時間的對象

二、使用步驟

2.1 依賴處理

SpringBoot相應的依賴已經包含在 context 包了,所以我們使用的時候不需要在 pom.xml 文件中再單獨添加。如圖所示:

在這里插入圖片描述

2.2 定義事件實體類

事件類需要繼承 ApplicationEvent 類

示例:定義一個報警事件,屬性是報警實體類,也可以是其他字段或者實體根據業務自定義

package com.example.demozmq.event;import org.springframework.context.ApplicationEvent;/*** 定義一個報警事件,屬性是報警實體類*/
public class AlarmEvent extends ApplicationEvent {private PfsAlarm pfsAlarm;public AlarmEvent(Object source, PfsAlarm pfsAlarm) {super(source);this.pfsAlarm = pfsAlarm;}public PfsAlarm getPfsAlarm() {return pfsAlarm;}
}

2.3 定義事件監聽類

事件監聽類,實現 ApplicationListener 接口,泛型是<自定義的事件實體類>

package com.example.demozmq.listener;import com.example.demozmq.event.AlarmEvent;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;@Slf4j
@Component
public class AlarmListener implements ApplicationListener<AlarmEvent> {@Overridepublic void onApplicationEvent(AlarmEvent alarmEvent) {log.info(">>>>>>>>>>>>>>>>>>>  執行事件監聽開始,調用參數是:{}", alarmEvent.getPfsAlarm());try {// 此處是執行具體的業務處理邏輯TimeUnit.SECONDS.sleep(100);log.info(">>>>>>>>>>>>>>>>>>> 執行具體的任務完成!");} catch (Exception e) {e.printStackTrace();}log.info(">>>>>>>>>>>>>>>>>>> 執行事件監聽結束");}
}

如下圖所示實際的應用示例:

在這里插入圖片描述

2.4 事件發布

以下兩處皆為事件發布,只是不同業務而已,可以參照哈

在這里插入圖片描述在這里插入圖片描述

三、異步調用

3.1 啟用異步調用

在這里插入圖片描述

3.2 監聽器方法上添加 @Async 注解

在這里插入圖片描述

本文完結!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210413.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210413.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210413.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

持續集成交付CICD:使用Jenkins插件上傳Nexus制品

目錄 一、實驗 1.使用Jenkins插件上傳Nexus制品 一、實驗 1.使用Jenkins插件上傳Nexus制品 &#xff08;1&#xff09;Jenkins安裝插件Nexus Artifact Uploader &#xff08;2&#xff09;添加憑據 &#xff08;3&#xff09;使用片段生成器生成DSL &#xff08;4&#xf…

基于Java物業管理系統

基于Java物業管理系統 功能需求 1、房產信息管理&#xff1a;系統需要提供房產信息管理功能&#xff0c;包括房產的基本信息、租賃狀態、業主信息等。 2、報修管理&#xff1a;系統需要提供報修管理功能&#xff0c;業主可以通過系統提交報修申請&#xff0c;物業管理人員可…

docke網絡之bridge、host、none

一、bridge網絡 1.創建一個測試容器 [rootlocalhost ~]# docker run -d -it --name busybox_1 busybox /bin/sh -c "while true;do sleep 3600;done" 03b308c847edd23f21ba69afb825d92f7aaeb05b1ff4431dd47ccee439a0361a 2.查看當前機器docker有哪些網絡 [rootlocal…

C++ 訪問限定符

目錄 訪問修飾符概述 protected在類的內部和派生類中訪問調用 private在類的內部訪問和調用 訪問修飾符概述 在C中&#xff0c;有三個主要的訪問修飾符&#xff1a;public、private和protected。這些修飾符用于控制類的成員&#xff08;變量和函數&#xff09;的訪問權限。…

2023年9月8日 Go生態洞察:gopls的擴展與Go生態系統的成長

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

AI材料專題報告:AI革命催生新需求國產替代推動新方向

今天分享的AI系列深度研究報告&#xff1a;《AI材料專題報告&#xff1a;AI革命催生新需求國產替代推動新方向》。 &#xff08;報告出品方&#xff1a;光大證券&#xff09; 報告共計&#xff1a;25頁 1、算力需求增長催生 800G 光模塊需求 算力是數字經濟時代新生產力&…

2023年10月9日 Go生態洞察:深入了解類型推斷及其更多細節

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

【C++ Primer Plus學習記錄】if語句

目錄 一、if語句 二、if else語句 三、格式化if else語句 四、if else if else結構 一、if語句 if語句讓程序能夠決定是否應執行特定的語句。 if有兩種格式&#xff1a;if和if else。 if語句的語法與while相似&#xff1a; if(test-condition)statement; 如果test-con…

Android 從assets讀取文件裝載成Bitmap,Kotlin

Android 從assets讀取文件裝載成Bitmap&#xff0c;Kotlin /*** fileName assets里面圖片文件名*/fun readBitmapFromAssets(ctx: Context, fileName: String): Bitmap? {val assetManager: AssetManager ctx.assetsvar bitmap: Bitmap? nulltry {val inputStream assetMa…

Java預科知識

以下內容是根據狂神的Java說、chatgpt和csdn相關博客&#xff0c;結合自己的理解完成的。 Java了解 基于Java 開發了巨多的平臺&#xff0c;系統&#xff0c;工具 構建工具&#xff1a; Ant, Maven, Jekins應用服務器&#xff1a;Tomcat, Jetty, Jboss, Websphere, weblogic…

程序員入門:打造抖音同城外賣小程序的技術解析

在當今數字化時代&#xff0c;外賣平臺已經成為人們生活中不可或缺的一部分&#xff0c;而抖音作為一款社交媒體平臺&#xff0c;也開始涉足同城外賣服務。本文將為初學者提供一份關于如何打造抖音同城外賣平臺的技術解析&#xff0c;探討其中的關鍵技術和步驟。 一、項目規劃…

【C++】輸入輸出流 ⑤ ( cin 輸入流對象 | cin.ignore() 函數 | cin.peek() 函數 | cin.putback() 函數 )

文章目錄 一、cin.ignore() 函數1、cin.ignore() 函數簡介2、cin.ignore() 函數原型3、代碼示例 - cin.ignore() 函數 二、cin.peek() 函數1、cin.peek() 函數簡介2、代碼示例 - cin.peek() 三、cin.putback() 函數1、cin.putback() 函數簡介2、代碼示例 - cin.putback() 一、c…

if語句和switch語句來確定金額之下的優惠折扣

一、優惠規則 輸入相應的金額&#xff0c;可以獲得規則之下&#xff0c;金額相應的享受的折扣&#xff0c;需要先定義金額&#xff0c;然后就是使用if語句進行判斷&#xff0c;使用switch語句選擇判斷規則之下對應的優惠折扣。 二、相關代碼 public class DiscountPrice {p…

<DB2>《DB2使用期間一些注意事項》

1 建存儲過程時 Create 后不能使用 TAB 鍵 create procedure create 后只能用空格&#xff0c;而不可用 tab 健&#xff0c;否則編譯會通不過。 2 查看語句執行計劃 dynexpln -d testdb -f test.sql -o test.out -g -z ; sql 語句放在 test.sql 中&#xff0c;結果輸出到 te…

git 拉取項目指定目錄或者指定文件

因為要做數據庫自動更新&#xff0c;需要拉取Gitlab項目中/bm-server-biz/docs目錄下的表更新sql文件&#xff0c;其他的都不需要&#xff0c;這時候可以利用git的“sparse checkout”方法&#xff08;設置稀疏檢出&#xff09;來實現。 1、在項目目錄下git 初始化 [rootxcc-…

開源軟件:JumpServer、DataEase、MeterSphere

FIT2CLOUD 認識開源軟件之前&#xff0c;先了解一下開發團隊FIT2CLOUD。FIT2CLOUD&#xff08;飛致云&#xff09;是一家中國領先的開源軟件公司&#xff0c;成立于2014年。公司專注于提供工業操作系統技術平臺與解決方案&#xff0c;是中國工業互聯網行業的領軍企業&#xff…

矩陣處理—Zigzag矩陣打印

與其明天開始&#xff0c;不如現在行動&#xff01; 文章目錄 Zigzag矩陣打印1.1 題目描述1.2 解決思路1.3 代碼實現 &#x1f48e;總結 Zigzag矩陣打印 1.1 題目描述 有一個n行m列的矩陣&#xff0c;要求按照Z字形打印出數據&#xff0c;如圖&#xff1a; 1.2 解決思路 用一…

Weblogic T3協議反序列化漏洞

文章目錄 1. Weblogic T3協議反序列化漏洞1.1 漏洞描述1.2 基本原理1.3 漏洞復現1.4 修復建議 1. Weblogic T3協議反序列化漏洞 1.1 漏洞描述 說明內容漏洞編號CVE-2018-2628漏洞名稱Weblogic T3協議反序列化漏洞漏洞評級高危影響范圍Weblogic 10.3.6.0Weblogic 12.1.3.0Webl…

基于JavaWeb+SSM+Vue居住證申報系統小程序的設計和實現

基于JavaWebSSMVue居住證申報系統小程序的設計和實現 源碼獲取入口KaiTi 報告Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 KaiTi 報告 1.1題目背景 隨著時代的發展&#xff0c;人口流動越來越頻繁&#xff0…

生活、工作常用API免費接口

身份證識別OCR&#xff1a;傳入身份證照片&#xff0c;識別照片文字信息并返回&#xff0c;包括姓名、身份證號碼、性別、民族、出生年月日、地址、簽發機關及有效期。二維碼識別OCR&#xff1a;對圖片中的二維碼、條形碼進行檢測和識別&#xff0c;返回存儲的文字內容。銀行卡…