在 Spring Boot 和 Spring 框架中,ApplicationContext 和它的一些子接口或实现类(如 ConfigurableApplicationContext、ConfigurableWebServerApplicationContext 和 ServletWebServerApplicationContext)用来处理应用的上下文对象,以及管理 Bean 的生命周期和配置。它们之间的主要区别和联系如下:
1. ApplicationContext
ApplicationContext 是 Spring 的核心接口之一,是 Spring IoC 容器的最高级接口,定义了 Spring 应用上下文的基本机制和功能。
特点:
- 它是一个只读接口,主要用来获取各种 Bean 定义和管理 Bean 的生命周期。
- 提供了访问容器中 Bean 的基本功能,比如通过
getBean()获取 Bean,发布事件,访问环境等。 - 应用上下文针对不同的类型有不同实现,比如
FileSystemXmlApplicationContext,ClassPathXmlApplicationContext等。
核心功能:
- Bean 容器管理。
- 事件发布和订阅机制。
- 国际化支持。
- 环境和属性管理。
2. ConfigurableApplicationContext
ConfigurableApplicationContext 是 ApplicationContext 的子接口,扩展了对应用上下文的配置和管理功能。它是应用上下文的“可配置版本”。
特点:
- 增加了上下文的启动(
refresh())、关闭(close())、注册关闭钩子(registerShutdownHook())等功能。 - 支持通过
setId()、setParent()等方法进行上下文配置。
核心功能:
- 提供了
refresh()方法,用于刷新或启动容器;在 Spring Boot 中,通过这个方法来加载应用的 Bean 定义。 - 提供了
close()方法,用于关闭应用上下文,释放资源。
联系:
ConfigurableApplicationContext 通常会在使用 Spring Boot 或 Spring 应用程序时被用作主上下文。
3. ConfigurableWebServerApplicationContext
ConfigurableWebServerApplicationContext 是 ConfigurableApplicationContext 的一个更具体的子接口,专为基于 Web 环境的 Spring 应用上下文而设计。
特点:
- 主要用于 Spring Web 应用场景。
- 添加了 Web 服务器特定的接口,比如对嵌入式 Web 服务器(如 Tomcat、Jetty)的支持。
- 定义了 Web 应用上下文的特有属性和方法,例如
getServerNamespace()和setServerNamespace(),用于指定 Web 服务端命名空间。
核心功能:
- 整合嵌入式 Web 服务器的配置与生命周期管理。
- 用于处理基于 Web 的 Spring 应用的上下文。
联系:
ConfigurableWebServerApplicationContext 是一个高度 Web 专用的 ApplicationContext 子接口,其实现类之一是 ServletWebServerApplicationContext。
4. ServletWebServerApplicationContext
ServletWebServerApplicationContext 是 Spring Boot 提供的默认实现类,用于运行基于 Servlet 的嵌入式 Web 服务器(如 Tomcat)的 Spring 应用上下文。
特点:
- 是
ConfigurableWebServerApplicationContext的具体实现。 - 是 Spring Boot Web 应用的上下文的核心类。
- 负责管理嵌入式 Web 容器的生命周期(比如启动、停止等)。
- 适用于基于 Servlet 和 Spring Web 的应用程序上下文。
核心功能:
- 启动嵌入式 Web 服务器。
- 在嵌入式或外部容器中加载 Spring Web 应用。
- 提供与 Servlet 容器相关的上下文功能。
- 用于 Spring Boot 的大多数 Web 项目场景。
联系:
在 Spring Boot Web 项目中,当设置了依赖(如 spring-boot-starter-web)时,SpringApplication 会默认创建并使用 ServletWebServerApplicationContext,实现 Web 应用的上下文逻辑。
它们的层次结构与关系
以下是它们之间的结构关系,表明了从通用到特化的实现链:
ApplicationContext(顶级接口)
└── ConfigurableApplicationContext(可配置应用上下文)
└── ConfigurableWebServerApplicationContext(可配置的 Web 服务器上下文,Web 特化)
└── ServletWebServerApplicationContext(Servlet 专用实现类,Spring Boot 默认使用)
举例说明
-
如果是一个普通的 Spring 应用,你可能只使用
ConfigurableApplicationContext或直接使用更顶层的ApplicationContext来管理上下文。 -
如果是一个 Spring Boot Web 应用,Spring Boot 会自动使用
ServletWebServerApplicationContext,通过它启动嵌入式 Web 容器(如 Tomcat)。
总结
| 接口/类 | 作用 | 上下文特性 |
|---|---|---|
ApplicationContext | Spring 应用上下文核心接口 | 提供 Bean 容器的基本功能 |
ConfigurableApplicationContext | 可配置的应用上下文 | 提供启动、刷新、关闭能力 |
ConfigurableWebServerApplicationContext | Web 专用应用上下文接口 | 增加对嵌入式 Web 容器的支持 |
ServletWebServerApplicationContext | 默认 Servlet Web 上下文实现 | 管理嵌入式 Web 容器 |
ServletWebServerApplicationContext 是 Spring Boot Web 项目中最常用的上下文实现类,位于框架设计的最底层,自动完成了嵌入式服务器初始化和 Servlet 上下文绑定的工作。
3858

被折叠的 条评论
为什么被折叠?



