Spring 事件監聽

參考:Spring事件監聽流程分析【源碼淺析】_private void processbean(final string beanname, fi-CSDN博客

一、簡介

? ? Spring早期通過實現ApplicationListener接口定義監聽事件,Spring 4.2開始通過@EventListener注解實現監聽事件

@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {/*** Handle an application event.* @param event the event to respond to*/void onApplicationEvent(E event);/*** Create a new {@code ApplicationListener} for the given payload consumer.* @param consumer the event payload consumer* @param <T> the type of the event payload* @return a corresponding {@code ApplicationListener} instance* @since 5.3* @see PayloadApplicationEvent*/static <T> ApplicationListener<PayloadApplicationEvent<T>> forPayload(Consumer<T> consumer) {return event -> consumer.accept(event.getPayload());}}

二、示例

? ? (1)、自定義事件,相當于抽象觀察者? ???

/*
* 系統日志事件,觀察者
* */
public class SysLogEvent extends ApplicationEvent {public SysLogEvent(SysLog sysLog){super(sysLog);}
}

?? ?(2)、自定義實現,相當于具體觀察者

@Component
public class SysLogListener implements ApplicationListener<SysLogEvent> {private final static Logger logger = LoggerFactory.getLogger(SysLogListener.class);@Overridepublic void onApplicationEvent(SysLogEvent event) {logger.info("收到調用日志消息:"+ JSON.toJSONString(event));}/** spring 4.2版本用@EventListener注解* */
//    @EventListener(SysLogEvent.class)public void saveSysLog(SysLog event){logger.info("收到調用日志消息:"+ JSON.toJSON(event));}
}

?? ?(3)、發布訂閱事件

@RestController
@RequestMapping("/event")
public class EventController {@Autowiredprivate ApplicationContext applicationContext;@RequestMapping("public")public void event(){SysLog sysLog = new SysLog();sysLog.setLogId("1");sysLog.setCode("2");sysLog.setMessage("3");applicationContext.publishEvent(new SysLogEvent(sysLog));}
}

??(4)、測試

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

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

相關文章

Rustdesk客戶端源碼編譯

1.安裝VCPKG windows平臺vcpkg安裝-CSDN博客 2.使用VCPKG安裝: windows平臺vcpkg安裝-CSDN博客 配置VCPKG_ROOT環境變量: 安裝靜態庫: ./vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static 靜態庫安裝成…

【C語言深度解剖】(15):動態內存管理和柔性數組

&#x1f921;博客主頁&#xff1a;醉竺 &#x1f970;本文專欄&#xff1a;《C語言深度解剖》 &#x1f63b;歡迎關注&#xff1a;感謝大家的點贊評論關注&#xff0c;祝您學有所成&#xff01; ??&#x1f49c;&#x1f49b;想要學習更多C語言深度解剖點擊專欄鏈接查看&…

I.MX6ULL的官方 SDK 移植實驗

系列文章目錄 I.MX6ULL的官方 SDK 移植實驗 I.MX6ULL的官方 SDK 移植實驗 系列文章目錄一、前言二、I.MX6ULL 官方 SDK 包簡介三、硬件原理圖四、試驗程序編寫4.1 SDK 文件移植4.2 創建 cc.h 文件4.3 編寫實驗代碼 五、編譯下載驗證5.1編寫 Makefile 和鏈接腳本5.2編譯下載 一、…

列表元素添加的藝術:從單一到批量

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、引言 二、向列表中添加單一元素 1. append方法 2. insert方法 三、向列表中添加批量…

MySQL 存儲過程(實驗報告)

一、實驗名稱&#xff1a; 存儲過程 二、實驗日期&#xff1a; 2024 年5 月 25 日 三、實驗目的&#xff1a; 掌握MySQL存儲過程的創建及調用&#xff1b; 四、實驗用的儀器和材料&#xff1a; 硬件&#xff1a;PC電腦一臺&#xff1b; 配置&#xff1a;內存&#xff0…

Android 配置本地解決下載 Gradle 慢的問題

步驟1 打開項目下 gradle/wrapper/gradle-wrapper.properties 文件。 步驟2 文件內容如下。 #Sat May 25 16:24:00 CST 2024 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps\://services.gradle.org/distributions/gradle-8.7-bin…

SW焊接路徑不能是閉合的

如果是整個圓,就不能作出焊件

【Docker學習】深入研究命令docker exec

使用docker的過程中&#xff0c;我們會有多重情況需要訪問容器。比如希望直接進入MySql容器執行命令&#xff0c;或是希望查看容器環境&#xff0c;進行某些操作或訪問。這時就會用到這個命令&#xff1a;docker exec。 命令&#xff1a; docker container exec 描述&#x…

ssm275寵物醫院管理系統+vue-手把手調試搭建

ssm275寵物醫院管理系統vue-手把手調試搭建 ssm275寵物醫院管理系統vue-手把手調試搭建

Jmeter預習第1天

Jmeter參數化&#xff08;重點&#xff09; 本質&#xff1a;使用參數的方式來替代腳本中的固定為測試數據 實現方式&#xff1a; 定義變量&#xff08;最基礎&#xff09; 文件定義的方式&#xff08;所有測試數據都是固定的情況下[死數據]&#xff0c;eg:注冊登錄&#xff0…

Linux -- 進程間通信的五種方式

IPC&#xff08;InterProcess Communication&#xff09;的方式通常有管道&#xff08;包括無名管道和命名管道&#xff09;、消息隊列、信號量、共享存儲、Socket、Streams等。其中Socket和Stream支持不同主機上的兩個進程IPC。 管道&#xff08;Pipes&#xff09;&#xff1a…

STM32中斷編程入門

文章目錄 一、 理論部分1.中斷系統2.中斷執行流程3.NVIC的基本結構4.EXTI介紹5.AFIO復用IO口 二、實驗目的&#xff1a;學習stm32中斷原理和開發編程方法。使用標準完成以下任務&#xff1a;&#xff08;一&#xff09;實驗一 開關控制LED的亮滅1.代碼部分2.運行結果 &#xff…

Qt | QFormLayout 類(表單布局)

01、上節回顧 Qt | QGridLayout 類(網格布局)02、簡介 1、QFormLayout 布局以兩列的形式列出其子項目, 2、QFormLayout 被分成兩列,左列是標簽(label)部分,通常由標簽 QLabel 組成,右列是由 字段(field)部分,通常是 QLineEdit 行編輯器,QSpinBox 旋轉框等部件,注意:…

【簡單易用,新人友好】一個輕量級生物信息學流程框架,從此解決99%的生物信息學流程搭建問題...

生物信息學數據分析流程的搭建是一項繁重而復雜的工作。隨著行業的發展&#xff0c;各種生信流程框架層出不窮&#xff0c;比如有: NextflowSnakemakeCWLWDL 各種標準&#xff0c;各種規則&#xff0c;令人眼花繚亂。選擇太多&#xff0c;往往令人無所適從。特別是新進入行業的…

小程序的深層了解

一:wxss的全局樣式和局部樣式 寫在文件上,第一個路徑會執行全局和局部自帶的wxss給wxml,會執行wxml,會執行json和js. 無論那個文件都會執行文件夾內的和外部的app.wxss,但是如果有一樣的屬性,則看屬性的權重,權重一樣,則設置局部樣式. 二:全局配置 wx:key"寫的是data內…

17.7K星開源產品分析平臺:Posthog

Posthog&#xff1a;開源洞察&#xff0c;產品優化的得力助手 - 精選真開源&#xff0c;釋放新價值。 概覽 PostHog是一個全面開源的平臺&#xff0c;旨在幫助團隊構建更好的產品。它提供了從產品分析到會話回放、功能標志和A/B測試等一系列工具&#xff0c;支持自托管&#x…

如何通過Nginx配置將請求轉發到conf.d目錄下的各個配置文件

目錄 如何通過Nginx配置將請求轉發到conf.d目錄下的各個配置文件1. 修改主配置文件 nginx.conf2. 在 conf.d 目錄中創建站點配置3. 設置站點根目錄和權限4. 檢查配置并重新加載Nginx總結 如何通過Nginx配置將請求轉發到conf.d目錄下的各個配置文件 在使用Nginx進行網站管理時&…

讀人工智能時代與人類未來筆記14_管控人工智能

1. 管控人工智能 1.1. 歷史上的戰場進一步推進到與數字網絡相連的所有地方 1.2. 數字程序現在控制著一個由眾多實體系統構成的龐大且仍在不斷增長的領域&#xff0c;而且越來越多的此類系統已實現網絡化 1.2.1. 在某些情況下甚至連門鎖和冰箱都實現了網絡化 1.2.2. 這催生出…

拋出異常時仍然需要記錄錯誤日志

場景&#xff1a;當service的方法執行拋出異常時&#xff0c;事務會發生回滾&#xff0c;導致無法記錄錯誤日志 解決&#xff1a;切面 其他&#xff1a;1.日志需要記錄日志標題&#xff0c;保存入參 2.失敗時會拋出異常&#xff1b;日志需要判斷執行是否成功&#xff0c;記錄…

2024年漢字小達人活動4個多月開賽:18道歷年選擇題和答案、解析

根據近年的安排&#xff0c;2024年第11屆漢字小達人比賽還有4個多月就啟動&#xff0c;那么孩子們如何利用這段時間有條不紊地備考呢&#xff1f;我的建議是兩手準備&#xff1a;①把小學1-5年級的語文課本上的知識點熟悉&#xff0c;重點是字、詞、成語、古詩。②把歷年真題刷…