容器初始化Spring Boot項目原理,即web項目(war)包涉及相關類對比詳解

以下是關于 SpringBootServletInitializerServletContainerInitializerSpringServletContainerInitializerWebApplicationInitializerServletInitializer 的對比詳解及總結表格:
在這里插入圖片描述


1. 核心對比詳解

(1) SpringBootServletInitializer
  • 作用
    Spring Boot 提供的類,用于將應用打包為 war 文件并部署到外部 Servlet 容器(如 Tomcat、Jetty)。
    通過繼承該類并重寫 configure 方法,指定主應用類,替代內嵌服務器的啟動方式。
  • 使用場景
    需要將 Spring Boot 應用部署到傳統 Servlet 容器(如 Tomcat 作為依賴而非內嵌)或企業級服務器(如 WebLogic)。
  • 實現方式
    繼承該類并重寫 configure(SpringApplicationBuilder) 方法,指定主應用類。
  • 生命周期
    在應用啟動時由 Servlet 容器加載,初始化 Spring 上下文。
(2) ServletContainerInitializer (SCI)
  • 作用
    Java Servlet 3.0 標準接口,允許框架在應用啟動時自動注冊 Servlet、Filter、Listener 等,無需 web.xml
    通過 META-INF/services/javax.servlet.ServletContainerInitializer 文件聲明實現類。
  • 使用場景
    框架或庫的開發者自定義初始化邏輯(如 Spring 的 SpringServletContainerInitializer)。
  • 實現方式
    實現 ServletContainerInitializer 接口,并通過服務提供者機制注冊。
  • 生命周期
    在應用啟動時由 Servlet 容器自動調用,優先于 WebApplicationInitializer
(3) SpringServletContainerInitializer
  • 作用
    Spring Framework 提供的 ServletContainerInitializer 實現類,用于自動發現和注冊 Spring 相關的 Servlet、Filter 等。
    主要用于 Spring MVC 的自動配置(如 DispatcherServlet)。
  • 使用場景
    Spring MVC 應用中無需 web.xml 的配置,由 Spring 自動處理初始化。
  • 實現方式
    Spring 內部實現,開發者無需直接繼承或調用。
  • 生命周期
    由 Servlet 容器觸發,Spring 自動注冊相關組件。
(4) WebApplicationInitializer
  • 作用
    Spring 提供的抽象類,用于替代 web.xml 的配置方式,通過 Java 代碼配置 Servlet 上下文。
    需要繼承該類并重寫 onStartup 方法。
  • 使用場景
    在非 Spring Boot 的傳統 Spring MVC 項目中,用 Java 代碼替代 XML 配置。
  • 實現方式
    繼承 WebApplicationInitializer 并實現 onStartup 方法。
  • 生命周期
    在應用啟動時由 Servlet 容器加載,需與 ServletContainerInitializer 協作。
(5) ServletInitializer
  • 作用
    通常指自定義的 Servlet 初始化器(如 ServletRegistrationBean 或用戶自定義的注冊邏輯),用于顯式注冊 Servlet、Filter 等組件。
    例如,通過 ServletRegistrationBean 在 Spring Boot 中注冊自定義 Servlet。
  • 使用場景
    需要手動注冊特定 Servlet 或 Filter(如第三方庫的 Servlet)。
  • 實現方式
    使用 ServletRegistrationBean 或直接通過 ServletConfig 注冊。
  • 生命周期
    在應用啟動時由 Spring 上下文加載,需依賴 Spring 容器。

2. 關鍵區別對比表

類名作用域使用場景是否需要繼承/實現與 Spring Boot 兼容性生命周期觸發方式
SpringBootServletInitializerSpring Boot部署 war 到外部 Servlet 容器需繼承完全兼容Servlet 容器啟動時
ServletContainerInitializerJava Servlet 3.0 標準框架自動注冊組件(無需 web.xml需實現接口需通過 Spring 的實現間接使用Servlet 容器啟動時(優先級高)
SpringServletContainerInitializerSpring FrameworkSpring 自動注冊組件(如 DispatcherServletSpring 內部實現需 Spring Framework 支持由 Servlet 容器觸發
WebApplicationInitializerSpring Framework替代 web.xml 配置 Spring MVC需繼承需額外配置(非 Boot 項目)Servlet 容器啟動時
ServletInitializer自定義/通用手動注冊 Servlet/Filter(如 ServletRegistrationBean需通過 Spring API兼容,需 Spring 支持Spring 上下文初始化時

3. 使用場景選擇建議

需求選擇的類示例代碼
部署 Spring Boot 應用為 war 文件SpringBootServletInitializer```java
public class MyServletInitializer extends SpringBootServletInitializer { … } ```
自定義框架的自動初始化邏輯ServletContainerInitializer需實現接口并注冊服務提供者(通常由框架開發者處理)
Spring MVC 項目替代 web.xml 配置WebApplicationInitializer```java
public class MyWebInitializer extends WebApplicationInitializer { … } ```
Spring Boot 自動注冊組件(如 DispatcherServletSpringServletContainerInitializerSpring 內部實現,無需手動干預
手動注冊自定義 Servlet/FilterServletRegistrationBean(Spring 提供)```java
@Bean public ServletRegistrationBean myServlet() { … } ```

4. 總結

  • Spring Boot 特有SpringBootServletInitializer 是 Spring Boot 專為 war 部署設計的類。
  • Servlet 標準ServletContainerInitializer 是 Java 標準接口,框架開發者需實現它以支持無 web.xml 配置。
  • Spring MVC 配置WebApplicationInitializer 是 Spring Framework 的 Java 配置替代方案,適用于非 Boot 項目。
  • 自動注冊核心SpringServletContainerInitializer 是 Spring 的核心實現,確保 Spring MVC 組件自動注冊。
  • 靈活注冊ServletRegistrationBean 或自定義 ServletInitializer 用于顯式注冊組件,適用于特殊需求。

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

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

相關文章

Linux 系統中打包與壓縮

以下是 Linux 系統中 打包與壓縮 的核心操作指南,涵蓋常用命令、格式對比及典型場景應用: 一、核心概念 打包(Archiving) 將多個文件或目錄合并為一個文件(如 .tar),不改變文件體積。常用工具&a…

計算機組成原理(哈工大,會持續更新)

文章目錄 一 計算機組成概述1.1計算機系統簡介 一 計算機組成概述 1.1計算機系統簡介 計算機軟硬件的概念 計算機系統包含兩個部分一個部分為硬件,另一個部分為軟件 硬件:硬件包括我們能直觀看到的東西,也就是我們計算機的實體&#xff0…

ngx_conf_handler

定義在 src\core\ngx_conf_file.c static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last) {char *rv;void *conf, **confp;ngx_uint_t i, found;ngx_str_t *name;ngx_command_t *cmd;name cf->args->elts;found 0;for (…

Ubuntu系統美化

Ubuntu系統美化 一、Grub設置 1. 安裝Grub Customizer【推薦】 Grub Customizer是一個用于自定義 GRUB 引導菜單的實用程序 sudo add-apt-repository ppa:danielrichter2007/grub-customizer && sudo apt update && sudo apt install -y grub-customizer2.…

零基礎HTML·筆記(持續更新…)

基礎認知 HTML標簽的結構 <strong>文字變粗</strong> &#xff1c;開始標簽&#xff1e;內容&#xff1c;結束標簽&#xff1e; 結構說明&#xff1a; 標簽由<、>、1、英文單詞或字母組成。并且把標簽中<>包括起來的英文單詞或字母稱為標簽名。常…

nmcli創建wpa-psk2 wifi熱點

1. 創建新的WiFi連接&#xff1a; sudo nmcli connection add type wifi ifname wlan0 con-name WiFi名稱 autoconnect yes ssid WiFi名稱 2. 配置接入點模式和IP共享&#xff1a; sudo nmcli connection modify WiFi名稱 802-11-wireless.mode ap 802-11-wireless.band …

【消息隊列kafka_中間件】一、快速入門分布式消息隊列

在當今大數據和分布式系統盛行的時代&#xff0c;消息隊列作為一種關鍵的中間件技術&#xff0c;發揮著舉足輕重的作用。其中&#xff0c;Apache Kafka 以其卓越的性能、高可擴展性和強大的功能&#xff0c;成為眾多企業構建分布式應用的首選消息隊列解決方案。本篇文章將帶你深…

在線地圖支持天地圖和騰訊地圖,儀表板和數據大屏支持發布功能,DataEase開源BI工具v2.10.7 LTS版本發布

2025年4月11日&#xff0c;人人可用的開源BI工具DataEase正式發布v2.10.7 LTS版本。 這一版本的功能變動包括&#xff1a;數據源方面&#xff0c;Oracle數據源支持獲取和查詢物化視圖&#xff1b;圖表方面&#xff0c;在線地圖支持天地圖、騰訊地圖&#xff1b;新增子彈圖&…

【Linux實踐系列】:匿名管道收尾+完善shell外殼程序

&#x1f525; 本文專欄&#xff1a;Linux Linux實踐項目 &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 人生總會有自己能力所不及的范圍&#xff0c;但是如果你在你能力所及的范圍盡了全部的努力&#xff0c;那你還有什么遺…

【C++初學】課后作業匯總復習(七) 指針-深淺copy

1、 HugeInt類:構造、、cout Description: 32位整數的計算機可以表示整數的范圍近似為&#xff0d;20億到&#xff0b;20億。在這個范圍內操作一般不會出現問題&#xff0c;但是有的應用程序可能需要使用超出上述范圍的整數。C可以滿足這個需求&#xff0c;創建功能強大的新的…

【C++】 —— 筆試刷題day_16

刷題_day16&#xff0c;繼續加油啊 一、字符串替換 題目解析 這道題是一道簡單的字符題目&#xff0c;題目給我們一個字符串A&#xff0c;和n表示A字符串的長度&#xff0c;再給出一個字符數組arg&#xff0c;m表示arg中是數據個數。 然我們在字符串A中找到%s然后替換成arg中的…

n8n 本地部署及實踐應用,實現零成本自動化運營 Telegram 頻道(保證好使)

n8n 本地部署及實踐應用&#xff0c;實現零成本自動化運營 Telegram 頻道&#xff08;保證好使&#xff09; 簡介 n8n 介紹 一、高度可定制性 二、豐富的連接器生態 三、自托管部署&#xff08;本地部署&#xff09; 四、社區驅動 n8n 的部署 一、前期準備 二、部署步…

flutter 桌面應用之系統托盤

系統托盤(Tray) 系統托盤就是狀態欄里面對應的圖標點擊菜單 主要有兩款框架 框架一句話評價tray_manager輕量、簡單、易用&#xff0c;適合常規托盤功能system_tray更底層、更強大、支持圖標/菜單/消息彈窗等更多功能&#xff0c;但復雜度更高 &#x1f9f1; 基礎能力對比 …

修改idea/android studio等編輯器快捷注釋從當前行開頭的反人類行為

不知道什么時候開始&#xff0c;idea編輯的快捷注釋開始從當前行開頭出現了&#xff0c;顯得實在是難受&#xff0c;我只想讓在當前行代碼的部份開始縮進兩個字符開始&#xff0c;這樣才會顯得更舒服。不知道有沒有強迫癥的猴子和我一樣&#xff0c;就像下面的效果&#xff1a;…

MySQL慢查詢全攻略:定位、分析與優化實戰

&#x1f680; MySQL慢查詢全攻略&#xff1a;定位、分析與優化實戰 #數據庫優化 #性能調優 #SQL優化 #MySQL實戰 一、慢查詢定位&#xff1a;找到性能瓶頸 1.1 開啟慢查詢日志 -- 查看當前配置 SHOW VARIABLES LIKE %slow_query%; -- 動態開啟&#xff08;重啟失效&…

當原型圖與文字說明完全不同時,測試要怎么做?

當測試遇上左右手互搏的需求&#xff0c;怎么辦&#xff1f; "這個彈窗樣式怎么和文檔寫的不一樣&#xff1f;"、"按鈕位置怎么跑到左邊去了&#xff1f;"——根據Deloitte的調查&#xff0c;62%的項目存在原型圖與需求文檔不一致的情況。這種"精神分…

關于量化交易在拉盤砸盤方面應用的部分思考

關于“砸盤”的深層解析與操盤邏輯 ??一、砸盤的本質與市場含義?? ??砸盤??指通過集中拋售大量籌碼導致價格快速下跌的行為&#xff0c;其核心目標是??制造恐慌、清洗浮籌或實現利益再分配??。不同場景下的砸盤含義不同&#xff1a; ??主動砸盤&#xff08;操控…

【項目管理】第12章 項目質量管理-- 知識點整理

項目管理-相關文檔,希望互相學習,共同進步 風123456789~-CSDN博客 (一)知識總覽 項目管理知識域 知識點: (項目管理概論、立項管理、十大知識域、配置與變更管理、績效域) 對應:第6章-第19章 第6章 項目管理概論 4分第13章 項目資源管理 3-4分第7章 項目…

一個好看的圖集展示html頁面源碼

源碼介紹 一個好看的圖集展示html頁面源碼&#xff0c;適合展示自己的作品&#xff0c;頁面美觀大氣&#xff0c;也可以作為產品展示或者個人引導頁等等 源碼由HTMLCSSJS組成&#xff0c;記事本打開源碼文件可以進行內容文字之類的修改&#xff0c; 雙擊html文件可以本地運行…

2021第十二屆藍橋杯大賽軟件賽省賽C/C++ 大學 B 組

記錄刷題的過程、感悟、題解。 希望能幫到&#xff0c;那些與我一同前行的&#xff0c;來自遠方的朋友&#x1f609; 大綱&#xff1a; 1、空間-&#xff08;題解&#xff09;-字節單位轉換 2、卡片-&#xff08;題解&#xff09;-可以不用當組合來寫&#xff0c;思維題 3、直…