spring boot 事件機制

目錄

  • 概述
  • 實踐
    • 監聽spring boot ready事件
      • 代碼
    • 源碼
      • 初始化流程
      • 調用流程
  • 結束

概述

spring boot 版本為 2.7.17

整體看一下springspring boot 相關事件。
在這里插入圖片描述

根據下文所給的源碼關鍵處,打上斷點,可以進行快速調試。降低源碼閱讀難度。

實踐

spring 相關事件

  • 上下文更新事件(ContextRefreshedEvent):該事件會在ApplicationContext更新時發布。也可以在調用ConfigurableApplicationContext接口中的refresh()方法時被觸發。
  • 上下文開始事件(ContextStartedEvent):當容器ConfigurableApplicationContext的Start()方法開始/重新開始容器時觸發該事件。
  • 上下文停止事件(ContextStoppedEvent):當容ConfigurableApplicationContext的Stop()方法停止容器時觸發該事件。
  • 上下文關閉事件(ContextClosedEvent):當ApplicationContext被關閉時觸發該事件。容器被關閉時,其管理的所有單例Bean都被銷毀。

spring boot 相關事件

  • ApplicationStartingEvent :spring boot啟動開始時執行的事件
  • ApplicationEnvironmentPreparedEvent:spring boot 對應Enviroment已經準備完畢,但此時上下文context還沒有創建。
  • ApplicationPreparedEvent:spring boot上下文context創建完成,但此時spring中的bean是沒有完全加載完成的(org.springframework.boot.SpringApplicationRunListeners#environmentPrepared 這個觸發加載配置文件)。
  • ApplicationFailedEvent:spring boot啟動異常時執行事件

監聽spring boot ready事件

代碼

@Component
public class SpringBootReadyListener implements ApplicationListener<ApplicationReadyEvent> {@Overridepublic void onApplicationEvent(ApplicationReadyEvent event) {System.out.println("....ready..");}
}

窗口執行結果
在這里插入圖片描述

源碼

初始化流程

org.springframework.boot.SpringApplicationRunListener 很重要的接口,后面spring boot 發事件消息,使用這個接口的實現類 org.springframework.boot.context.event.EventPublishingRunListener 來執行。

org.springframework.boot.SpringApplication#getRunListeners

在這里插入圖片描述

調用流程

org.springframework.boot.SpringApplication#run(java.lang.Class<?>[], java.lang.String[])
org.springframework.boot.SpringApplication#run(java.lang.String...)
org.springframework.boot.SpringApplicationRunListeners#ready
org.springframework.boot.SpringApplicationRunListeners#doWithListeners(java.lang.String, java.util.function.Consumer<org.springframework.boot.SpringApplicationRunListener>, java.util.function.Consumer<org.springframework.core.metrics.StartupStep>)
org.springframework.boot.context.event.EventPublishingRunListener#ready
org.springframework.context.support.AbstractApplicationContext#publishEvent(java.lang.Object, org.springframework.core.ResolvableType)
org.springframework.context.support.AbstractApplicationContext#getApplicationEventMulticaster
org.springframework.context.event.SimpleApplicationEventMulticaster#invokeListener
org.springframework.context.event.SimpleApplicationEventMulticaster#doInvokeListener

在這里插入圖片描述

發送啟動 ready 事件消息。
在這里插入圖片描述
在這里插入圖片描述

執行結束
在這里插入圖片描述

結束

根據上文所給的源碼關鍵處,打上斷點,可以進行快速調試。降低源碼閱讀難度。

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

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

相關文章

TCP聊天

一、項目創建 二、代碼 Client類 package tcp;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner;public class Client {public static void m…

電子學會C/C++編程等級考試2022年06月(四級)真題解析

C/C++等級考試(1~8級)全部真題?點這里 第1題:公共子序列 我們稱序列Z = < z1, z2, ..., zk >是序列X = < x1, x2, ..., xm >的子序列當且僅當存在 嚴格上升 的序列< i1, i2, ..., ik >,使得對j = 1, 2, ... ,k, 有xij = zj。比如Z = < a, b, f, c &…

QT Windos平臺下打包應用程序

一、windeployqt.exe windeployqt&#xff1a;是 Qt 框架自帶的一個工具&#xff0c;用于將一個 Qt 應用程序在 Windows 操作系統下進行打包。它可以通過掃描應用程序的依賴項獲取所需的 Qt 庫文件、插件和翻譯文件&#xff0c;以及復制應用程序可執行文件和所需的依賴項到指定…

電商價格數據監測接口/品牌商品控價接口/商品數據分析接口/比價搜索API接口,超詳細的接口說明

電商價格數據監測API接口是一種用于監測電商平臺上商品價格的API接口&#xff0c;可以幫助品牌和商家及時獲取商品價格信息&#xff0c;掌握價格動態&#xff0c;進行價格對比和分析&#xff0c;以更好地制定價格策略和進行價格調整。 該接口可以監測多個電商平臺的商品價格信…

VM:Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize256m; support was removed in 8.0 “JDK 8兼容性指南” 指出&#xff0c;在Java 8中&#xff0c;命令行標志 MaxPermSize 已被刪除。原因是永久代從熱點堆中被移除并被轉移到本地內存。所以為了刪除…

【C++】:搜索二叉樹

朋友們、伙計們&#xff0c;我們又見面了&#xff0c;本期來給大家解讀一下有關多態的知識點&#xff0c;如果看完之后對你有一定的啟發&#xff0c;那么請留下你的三連&#xff0c;祝大家心想事成&#xff01; C 語 言 專 欄&#xff1a;C語言&#xff1a;從入門到精通 數據結…

C語言之動態內存管理(malloc calloc realloc)

C語言之動態內存管理 文章目錄 C語言之動態內存管理1. 為什么要有動態內存管理2. malloc 和 free2.1 malloc2.2 free2.3 例子 3. calloc 和 realloc3.1 calloc3.2 realloc 4. 常見的動態內存錯誤4.1 對NULL指針的解引?操作4.2 對動態開辟空間的越界訪問4.3 對?動態開辟內存使…

女裝品牌網站建設的作用如何

服裝是任何人都需要的必備品&#xff0c;尤其是女裝&#xff0c;由于女性群體愛美追求時尚的心理更高&#xff0c;因此市場中有大量女裝品牌以及大量消費者&#xff0c;其規模非常高&#xff0c;眾多大小品牌林立及消費征集下&#xff0c;商家們經營也并不太容易&#xff0c;企…

Themis: Fast, Strong Order-Fairness in Byzantine Consensus

目錄 筆記后續的研究方向摘要引言秩序井然 Themis: Fast, Strong Order-Fairness in Byzantine Consensus CCS 2023 筆記 后續的研究方向 摘要 我們介紹了Themis&#xff0c;這是一種將交易的公平排序引入&#xff08;許可的&#xff09;拜占庭共識協議的方案&#xff0c;最…

參加百度Apollo技術沙龍—感受自動駕駛的魅力

2023年12月2日下午2點&#xff0c;我有幸參加了百度Apollo技術沙龍&#xff0c;這是一個圍繞Apollo新版本Beta的全面升級展開的深度交流活動。作為一名工程師&#xff0c;我深感榮幸能夠與眾多同行和專家一同探討自動駕駛技術的快速發展 在這次沙龍中&#xff0c;我了解到Apo…

Python:核心知識點整理大全7-筆記

目錄 4.2.5 遺漏了冒號 4.3 創建數值列表 4.3.1 使用函數 range() 4.3.2 使用 range()創建數字列表 結果如下&#xff1a; 4.3.3 對數字列表執行簡單的統計計算 4.3.4 列表解析 4.4 使用列表的一部分 4.4.1 切片 4.4.2 遍歷切片 4.4.3 復制列表 4.2.5 遺漏了冒號 fo…

使用vue-quill-editor(富文本框)禁用粘貼圖片

問題描述&#xff1a;富文本框復制粘貼未走上傳圖片接口&#xff0c;會將復制的圖片解析為base64編碼&#xff0c;為了控制這種情況可選擇禁用粘貼圖片&#xff0c;或者監聽有復制粘貼的圖片走上傳圖片接口 獲取到 quill 對象&#xff0c;可以通過 refs 或者 Quill 對象的 getI…

小程序自動更新功能

小程序自動更新功能 在 .vue 頁面的 script 中添加生命周期&#xff0c;在生命周期內監聽頁面信息 onLoad onLoad(options) {this.getUserInfo()this.intervalId setInterval(() > {this.getUserInfo()}, 3000);},onUnload onUnload: function() {// 在頁面卸載時清除定時…

vue的data

類型&#xff1a;Object | Function 限制&#xff1a;組件的定義只接受 function。 詳細&#xff1a; Vue 實例的數據對象。Vue 會遞歸地把 data 的 property 轉換為 getter/setter&#xff0c;從而讓 data 的 property 能夠響應數據變化。對象必須是純粹的對象 (含有零個或多個…

DC電源模塊與節能環保的關系

BOSHIDA DC電源模塊與節能環保的關系 隨著全球能源危機的加劇&#xff0c;環保節能已經成為世界各國政府和企業發展的主要方向。在電子行業中&#xff0c; DC電源模塊的出現為環保節能做出了貢獻。DC電源模塊是一種電源供應器件&#xff0c;可將高電壓轉換為低電壓&#xff0c;…

柏林噪聲C++

柏林噪聲 隨機噪聲 如上圖所示隨機噪聲沒有任何規律可言&#xff0c;我們希望生成有一些意義的局部連續的隨機圖案 一維柏林噪聲 假設希望生成一段局部連續的隨機曲線&#xff0c;可以采用插值的方式&#xff1a;在固定點隨機分配y值&#xff08;一般是整數點&#xff09;&a…

【數據分析實戰】酒店行業華住集團門店分布與評分多維度分析

文章目錄 1. 寫在前面2. 數據集展示3. 多維度分析3.1 門店檔次多元化&#xff1a;集團投資戰略觀察3.1.1 代碼實現3.1.2 本人淺薄理解 3.2 門店分布&#xff1a;各省市分布概覽3.2.1 代碼實現3.2.2 本人淺薄理解 3.3 門店分級評分&#xff1a;服務水平的多維度觀察3.3.1 代碼實…

F5怎么樣?從負載均衡到云原生的進階之路

從Web時代開始至云原生時代的應用服務交付的市場&#xff0c;技術與人的變化就是關注的焦點。從單純的Web負載均衡到復雜的企業應用交付&#xff0c;從單體應用到分布式、微服務架構&#xff0c;F5為企業技術架構更好、更優、更安全的運行做出了極大的努力。那么F5怎么樣&#…

Vue 循環走馬燈

1、使用 transform: translateX()&#xff0c;循環將滾動內容在容器內偏移&#xff0c;超出容器部分隱藏&#xff1b; 2、避免滾動到末尾時出現空白&#xff0c;需要預留多幾個。 3、一次循環偏移的距離scrollLoopWidth 可能受樣式影響需要做些微調&#xff0c;比如單個item的…

題目:分糖果(藍橋OJ 2928)

題目描述&#xff1a; 解題思路&#xff1a; 本題采用貪心思想 圖解 題解&#xff1a; #include<bits/stdc.h> using namespace std;const int N 1e6 9; char s[N];//寫字符串數組的一種方法,像數組一樣***int main() {int n, x;cin >> n >> x;for(int …