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编辑器