调用 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中文网其他相关文章!