Spring Boot啟動過程?

目錄

1. 啟動入口

2. SpringApplication 初始化

3. 準備環境

4. 創建應用上下文(ApplicationContext)

5. 準備應用上下文

6. 刷新應用上下文

7. 啟動 Web 服務器(若為 Web 應用)

8. 發布 ApplicationStartedEvent 事件

9. 執行 Runner

10. 發布 ApplicationReadyEvent 事件


1. 啟動入口

Spring Boot 應用的啟動從 main 方法開始,main 方法通常位于一個帶有 @SpringBootApplication 注解的類中。@SpringBootApplication 是一個組合注解,它包含了 @Configuration(標識該類為配置類,可定義 Bean 等配置)、@EnableAutoConfiguration(開啟自動配置功能,依據項目依賴自動配置相關組件)和 @ComponentScan(用于掃描指定包及其子包下的組件,如 @Component@Service@Repository@Controller 等注解標注的類)。示例代碼如下:

@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

2. SpringApplication 初始化

SpringApplication.run() 方法會創建一個 SpringApplication 實例,并調用其 run 方法。該實例的初始化過程包含以下關鍵步驟:

  • 推斷應用類型:依據類路徑上的依賴來判斷應用類型,比如包含 spring-boot-starter-web 依賴則推斷為 Servlet 應用,若包含相關響應式編程依賴則推斷為 Reactive 應用等。
  • 設置初始化器(Initializers):通過 SpringFactoriesLoader 從 META-INF/spring.factories 文件中加載并應用 ApplicationContextInitializer。這些初始化器可在應用上下文創建前對其進行定制化配置,例如設置屬性源等。
  • 設置監聽器(Listeners):同樣借助 SpringFactoriesLoader 加載并應用 ApplicationListener,用于監聽應用啟動過程中的各類事件,如環境準備完成事件、應用上下文初始化事件等,以便在不同階段執行相應邏輯。
  • 推斷主應用類:通過堆棧跟蹤的方式推斷出主應用類,即包含 main 方法且帶有 @SpringBootApplication 注解的類。

3. 準備環境

在 run 方法中,Spring Boot 會進行應用環境(Environment)的準備工作,具

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

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

相關文章

VUE 獲取視頻時長,無需修改數據庫,前提當前查看視頻可以得到時長

第一字段處 <el-table-column label"視頻時長" align"center"> <template slot-scope"scope"> <span>{{ formatDuration(scope.row.duration) }}</span> </template> </el-ta…

seacmsv9注入管理員賬號密碼+orderby+limit

一、seacmsv9 SQL注入漏洞 1.1 seacms漏洞介紹 海洋影視管理系統&#xff08;seacms&#xff0c;海洋cms&#xff09;是一套專為不同需求的站長而設計的視頻點播系統&#xff0c;采 用的是 php5.Xmysql 的架構&#xff0c;seacmsv9漏洞文件&#xff1a;./comment/api/index.p…

WPF學習之Prism(二)

前言 學習一下Prism。 1.Prism Prism框架提供了一套豐富的工具、類和模塊&#xff0c;幫助開發人員實現以下功能&#xff1a; 模塊化&#xff1a;Prism框架支持將應用程序拆分為多個模塊&#xff0c;每個模塊具有自己的功能和視圖。這種模塊化的設計使得應用程序更加靈活和…

【EB-03】 AUTOSAR builder與EB RTE集成

AUTOSAR builder與EB RTE集成 1. Import Arxml files to Tresos2. Run MultiTask Script3. Add Components3.1 Run EcuExtractCreator Script4. Mapping Component to Partitions5. Event Mapping/Runnables Mapping to Tasks6. Port Connect7. Run SvcAs_Trigger Script8. Ver…

算法教程:香檳塔問題

香檳塔問題 問題描述 我們將玻璃杯堆成金字塔狀,第一排有 1 個玻璃杯,第二排有 2 個玻璃杯,依此類推,直到第 100 排。每個玻璃杯裝一杯香檳。 然后,將一些香檳倒入最上面的第一個玻璃杯中。當最上面的玻璃杯裝滿時,任何多余的液體都會均勻地落到它左右兩側的玻璃杯上。當…

FastJSON 默認行為:JSON.toJSONString 忽略 null 字段

完整的 FakeRegistrationController 代碼&#xff0c;這讓我可以全面分析后端邏輯&#xff0c;特別是為什么空的字段&#xff08;如 compareDate&#xff09;不返回給前端。我將詳細分析代碼的每個接口&#xff0c;尤其是與 list 請求和字段返回相關的部分&#xff0c;并解釋原…

大模型基礎概念之神經網絡寬度

在大模型中,神經網絡寬度是提升模型容量的核心手段之一,與深度、數據規模共同構成性能的三大支柱。合理增加寬度可顯著增強模型表達能力,但需結合正則化、硬件優化和結構設計進行平衡。未來趨勢可能包括動態寬度調整、稀疏化寬度設計(如MoE)以及更高效寬度-深度復合縮放策…

在Linux環境下利用MTCNN進行人臉檢測(基于ncnn架構)

概述 本文將詳細介紹如何在Linux環境下部署MTCNN模型進行人臉檢測&#xff0c;并使用NCNN框架進行推理。 1. CMake的安裝與配置 下載CMake源碼 前往CMake官網下載&#xff0c;找到適合您系統的最新版本tar.gz文件鏈接&#xff0c;或者直接通過wget下載&#xff1a;CMake官方…

算法day1 dfs搜索2題

一 火星人 拿到這種類似于排序的&#xff0c;這個就好比如我們之前學習dfs基礎的時候里面的指數型枚舉 指數型枚舉數據與數據之間沒有任何枚舉&#xff0c;就比如選這個數字與不選組合型枚舉數據與數據之間有聯系&#xff0c;下一個數字不可以給上一個數字排列型枚舉數據與數…

CC攻擊防御策略全解析:技術實現與代碼示例

CC攻擊&#xff08;Challenge Collapsar&#xff09;是一種以消耗服務器資源為目標的分布式拒絕服務攻擊&#xff08;DDoS&#xff09;&#xff0c;其特點在于攻擊流量偽裝成合法請求&#xff0c;難以通過傳統防火墻完全防御。本文將從技術實現角度詳細解析CC攻擊的防御策略&am…

(九)axios的使用

1、axios 的基本使用 1.1、簡介 在 Web 開發的演進歷程中&#xff0c;數據請求方式的變革至關重要。回溯早期&#xff0c;舊瀏覽器在向服務器請求數據時&#xff0c;存在嚴重弊端。由于返回的是整個頁面數據&#xff0c;每次請求都會導致頁面強制刷新&#xff0c;這不僅極大地…

【MySQL篇】數據庫基礎

目錄 1&#xff0c;什么是數據庫&#xff1f; 2&#xff0c;主流數據庫 3&#xff0c;MySQL介紹 1&#xff0c;MySQL架構 2&#xff0c;SQL分類 3&#xff0c;MySQL存儲引擎 1&#xff0c;什么是數據庫&#xff1f; 數據庫&#xff08;Database&#xff0c;簡稱DB&#xf…

網絡安全事件研判

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取網絡安全全套資料&#xff0c;資料在手&#xff0c;漲薪更快 研判&#xff08;入侵檢測&#xff09; 研判我理解為人工層面對入侵檢測事件進行再分析&#xff0c;即借助已有的設備告警根據經驗判斷是否為真實action 研判工作…

python整理文件下

我們使用 os.path.join() 函數拼接出文件要移動的目標地址。 并使用 os.path.exists() 函數配合 not 關鍵字找到未創建的文件夾。 這節課&#xff0c;我們會先創建文件夾&#xff0c;然后再移動文件到目標文件夾。如果文件夾不存在&#xff0c;我們需要先創建文件夾&#xff…

hackmyvm-buster

題目地址 信息收集 主機發現 ┌──(root?kali)-[/home/kali] └─# arp-scan -I eth1 192.168.56.0/24 Interface: eth1, type: EN10MB, MAC: 00:0c:29:34:da:f5, IPv4: 192.168.56.103 WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied WARNING: C…

FS800DTU聯動OneNET平臺數據可視化View

目錄 1 前言 2 環境搭建 2.1 硬件準備 2.2 軟件環境 2.3 硬件連接 3 注冊OneNET云平臺并建立物模型 3.1 參數獲取 3.2 連接OneNET 3.3上報數據 4 數據可視化View 4.1 用戶信息獲取 4.2 啟用數據可視化View 4.3 創建項目 4.4 編輯項目 4.5 新增數據源 4.6 數據過濾器配置 4.6 項…

Dockerfile 中的 COPY 語句:作用與使用詳解

在 Docker 的構建過程中&#xff0c;Dockerfile 是一個核心文件&#xff0c;它定義了鏡像的構建步驟和內容。其中&#xff0c;COPY 語句是一個非常重要的指令&#xff0c;用于將文件或目錄從構建上下文&#xff08;通常是 Dockerfile 所在的目錄及其子目錄&#xff09;復制到容…

大白話Vuex 核心概念(state、mutations、actions)的使用案例與原理

大白話Vuex 核心概念&#xff08;state、mutations、actions&#xff09;的使用案例與原理 Vuex是Vue.js應用程序中專門用來管理狀態的工具&#xff0c;就好像是一個大管家&#xff0c;幫你把項目里一些重要的數據和操作管理得井井有條。下面用大白話結合案例來介紹Vuex核心概…

機器學習介紹與數據集

一、機器學習介紹與定義 1.1 機器學習定義 機器學習&#xff08;Machine Learning&#xff09;是讓計算機從數據中自動學習規律&#xff0c;并依據這些規律對未來數據進行預測的技術。它涵蓋聚類、分類、決策樹、貝葉斯、神經網絡、深度學習&#xff08;Deep Learning&#xf…

大模型訓練——pycharm連接實驗室服務器

一、引言 我們在運行或者復現大佬論文代碼的時候&#xff0c;筆記本的算力不夠&#xff0c;需要使用實驗室的服務器進行運行。可以直接在服務器的終端上執行&#xff0c;但是這樣的話代碼調試就不方便。而我們可以使用 pycharm 連接到服務器&#xff0c;既方便了代碼調試&…