調用 SpringApplication.run(MySpringBootApp.class, args);
時,Spring Boot 會根據以下因素自動確定正確的 ApplicationContext 實現:
SpringApplication 內部使用以下邏輯選擇合適的 ApplicationContext:
如果存在 Spring MVC 或 Spring WebFlux (依賴項中包含 spring-boot-starter-web 或 spring-boot-starter-webflux):
AnnotationConfigServletWebServerApplicationContext
(用於帶有嵌入式 Tomcat、Jetty 或 Undertow 的 Spring MVC 應用程序)。 AnnotationConfigReactiveWebServerApplicationContext
(用於 WebFlux 應用程序)。 如果既不存在 spring-boot-starter-web 也不存在 spring-boot-starter-webflux:
AnnotationConfigApplicationContext
。 <code class="language-java">@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()); } }</code>
如果包含 spring-boot-starter-web,輸出將為:
<code>Context Type: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext</code>
如果移除 spring-boot-starter-web,輸出將變為:
<code>Context Type: org.springframework.context.annotation.AnnotationConfigApplicationContext</code>
應用程序上下文是核心容器,它管理 Spring Boot 應用程序中 Bean 的生命週期和配置。初始化它對於以下原因至關重要:
@Autowired
)。 @EnableAutoConfiguration
機制依賴於應用程序上下文。 ApplicationReadyEvent
、ApplicationStartedEvent
)。 application.properties
或 application.yml
加載配置屬性。 @Profile
) 和特定於環境的設置。 選擇正確的應用程序上下文會影響應用程序的行為方式,具體如下:
AnnotationConfigServletWebServerApplicationContext
,它引導 Tomcat/Jetty。 @RestController
將不起作用)。 DispatcherServlet
,它處理 HTTP 請求。 方面 | Application Context 的影响 |
---|---|
Bean 管理 | 初始化和管理依赖项 (`@Autowired`) |
Web 服务器 | 启动嵌入式 Tomcat/Jetty(如果为 Web 上下文) |
自动配置 | 根据类路径应用自动配置 |
生命周期管理 | 处理启动/关机事件 |
配置文件和环境 | 加载属性,管理配置文件 (`@Profile`) |
依赖注入范围 | 确定哪些 Bean 和控制器可用 |
AnnotationConfigServletWebServerApplicationContext
)。 AnnotationConfigApplicationContext
)。 以上是Spring-:How-spring-boot-determines-application-context的詳細內容。更多資訊請關注PHP中文網其他相關文章!