Spring Boot 自動確定 Application Context 的實現方式
調用 SpringApplication.run(MySpringBootApp.class, args);
時,Spring Boot 會根據以下因素自動確定正確的 ApplicationContext 實現:
- 類路徑 (項目中存在的依賴)
- 運行的應用程序類型 (Web 或非 Web)
確定過程
SpringApplication 內部使用以下邏輯選擇合適的 ApplicationContext:
-
如果存在 Spring MVC 或 Spring WebFlux (依賴項中包含 spring-boot-starter-web 或 spring-boot-starter-webflux):
- 它會初始化一個基於 Web 的應用程序上下文:
-
基於 Servlet 的 (存在 spring-boot-starter-web): →
AnnotationConfigServletWebServerApplicationContext
(用於帶有嵌入式 Tomcat、Jetty 或 Undertow 的 Spring MVC 應用程序)。 -
反應式 (存在 spring-boot-starter-webflux): →
AnnotationConfigReactiveWebServerApplicationContext
(用於 WebFlux 應用程序)。
-
如果既不存在 spring-boot-starter-web 也不存在 spring-boot-starter-webflux:
- 它會初始化一個非 Web 應用程序上下文: →
AnnotationConfigApplicationContext
。
- 它會初始化一個非 Web 應用程序上下文: →
Web 應用程序上下文示例
@SpringBootApplication public class WebApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(WebApplication.class, args); System.out.println("Context Type: " + context.getClass().getName()); } }
如果包含 spring-boot-starter-web,輸出將為:
<code>Context Type: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext</code>
非 Web 應用程序上下文示例
如果移除 spring-boot-starter-web,輸出將變為:
<code>Context Type: org.springframework.context.annotation.AnnotationConfigApplicationContext</code>
初始化 Application Context 的重要性
應用程序上下文是核心容器,它管理 Spring Boot 應用程序中 Bean 的生命週期和配置。初始化它對於以下原因至關重要:
1. Bean 管理
- 應用程序上下文註冊和管理 Bean,允許依賴注入 (
@Autowired
)。 - 沒有應用程序上下文,Spring 將不知道如何實例化和注入依賴項。
2. 自動配置
-
@EnableAutoConfiguration
機制依賴於應用程序上下文。 - 它掃描類路徑並根據依賴項自動配置 Spring 組件。
3. 生命週期和事件管理
- 應用程序上下文發布生命週期事件 (
ApplicationReadyEvent
、ApplicationStartedEvent
)。 - 它偵聽關機信號並正確管理資源。
4. 嵌入式 Web 服務器支持
- 對於 Web 應用程序,應用程序上下文啟動嵌入式服務器(Tomcat、Jetty、Undertow)。
- 沒有它,Spring Boot無法處理 HTTP 請求。
5. 環境和屬性管理
- 上下文從
application.properties
或application.yml
加載配置屬性。 - 它管理配置文件 (
@Profile
) 和特定於環境的設置。
選擇正確的 Application Context 的實際影響
選擇正確的應用程序上下文會影響應用程序的行為方式,具體如下:
1. 確定是否啟動嵌入式 Web 服務器
- 如果選擇了錯誤的上下文,您的應用程序可能無法作為 Web 應用程序啟動。
- Web 應用程序需要
AnnotationConfigServletWebServerApplicationContext
,它引導 Tomcat/Jetty。
2. 控制組件掃描和依賴注入
- 上下文僅在其範圍內初始化和注入依賴項。
- 例如,非 Web 上下文不會掃描或初始化控制器(
@RestController
將不起作用)。
3. 啟用或禁用自動配置
- Spring Boot 根據所選上下文自動應用配置。
- 例如:如果選擇了 Web 上下文,Spring Boot 會自動配置 MVC 組件。
4. 影響 Bean 的管理和加載方式
- Web 上下文預配置
DispatcherServlet
,它處理 HTTP 請求。 - 非 Web 上下文沒有,這意味著如果沒有額外的配置,您將無法處理 Web 請求。
總結
方面 | Application Context 的影响 |
---|---|
Bean 管理 | 初始化和管理依赖项 (`@Autowired`) |
Web 服务器 | 启动嵌入式 Tomcat/Jetty(如果为 Web 上下文) |
自动配置 | 根据类路径应用自动配置 |
生命周期管理 | 处理启动/关机事件 |
配置文件和环境 | 加载属性,管理配置文件 (`@Profile`) |
依赖注入范围 | 确定哪些 Bean 和控制器可用 |
最後的想法
- Spring Boot 會根據類路徑自動選擇正確的應用程序上下文。
-
Web 應用程序需要基於 Web 的上下文 (
AnnotationConfigServletWebServerApplicationContext
)。 -
非 Web 應用程序使用標準的基於註解的上下文 (
AnnotationConfigApplicationContext
)。 - 初始化正確的上下文可確保正確的依賴注入、自動配置和生命週期管理。 ?
以上是Spring-:How-spring-boot-determines-application-context的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版
中文版,非常好用

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器