springboot中ApplicationContext接口体系简单了解

在 Spring Boot 和 Spring 框架中,ApplicationContext 和它的一些子接口或实现类(如 ConfigurableApplicationContextConfigurableWebServerApplicationContextServletWebServerApplicationContext)用来处理应用的上下文对象,以及管理 Bean 的生命周期和配置。它们之间的主要区别和联系如下:


1. ApplicationContext

ApplicationContext 是 Spring 的核心接口之一,是 Spring IoC 容器的最高级接口,定义了 Spring 应用上下文的基本机制和功能。

特点:
  • 它是一个只读接口,主要用来获取各种 Bean 定义和管理 Bean 的生命周期。
  • 提供了访问容器中 Bean 的基本功能,比如通过 getBean() 获取 Bean,发布事件,访问环境等。
  • 应用上下文针对不同的类型有不同实现,比如 FileSystemXmlApplicationContext,ClassPathXmlApplicationContext 等。
核心功能:
  • Bean 容器管理。
  • 事件发布和订阅机制。
  • 国际化支持。
  • 环境和属性管理。

2. ConfigurableApplicationContext

ConfigurableApplicationContextApplicationContext 的子接口,扩展了对应用上下文的配置和管理功能。它是应用上下文的“可配置版本”。

特点:
  • 增加了上下文的启动(refresh())、关闭(close())、注册关闭钩子(registerShutdownHook())等功能。
  • 支持通过 setId()setParent() 等方法进行上下文配置。
核心功能:
  • 提供了 refresh() 方法,用于刷新或启动容器;在 Spring Boot 中,通过这个方法来加载应用的 Bean 定义。
  • 提供了 close() 方法,用于关闭应用上下文,释放资源。
联系:

ConfigurableApplicationContext 通常会在使用 Spring Boot 或 Spring 应用程序时被用作主上下文。


3. ConfigurableWebServerApplicationContext

ConfigurableWebServerApplicationContextConfigurableApplicationContext 的一个更具体的子接口,专为基于 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 默认使用)

举例说明

  1. 如果是一个普通的 Spring 应用,你可能只使用 ConfigurableApplicationContext 或直接使用更顶层的 ApplicationContext 来管理上下文。

  2. 如果是一个 Spring Boot Web 应用,Spring Boot 会自动使用 ServletWebServerApplicationContext,通过它启动嵌入式 Web 容器(如 Tomcat)。


总结

接口/类作用上下文特性
ApplicationContextSpring 应用上下文核心接口提供 Bean 容器的基本功能
ConfigurableApplicationContext可配置的应用上下文提供启动、刷新、关闭能力
ConfigurableWebServerApplicationContextWeb 专用应用上下文接口增加对嵌入式 Web 容器的支持
ServletWebServerApplicationContext默认 Servlet Web 上下文实现管理嵌入式 Web 容器

ServletWebServerApplicationContext 是 Spring Boot Web 项目中最常用的上下文实现类,位于框架设计的最底层,自动完成了嵌入式服务器初始化和 Servlet 上下文绑定的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值