ApplicationContext体系结构

体系结构图

image-20220102145024080

Application 称为是应用程序上下文, 它包括除创建 Bean 以外的额外功能。方便用户根据自己的需求开箱记录。在我们使用 IOC 容器的时候, 绝大部分使用的都是 ApplicationContext, BeanFactory 是 Spring 框架的基础设施, 面向 Spring 自身, ApplicationContext 面向的是 Spring 框架的开发者。

image-20220102145151687

  • 它继承了 EnvironmentCapable 接口, 该接口主要是获取一些容器的启动参数,还可能会整合了更多的功能, 其中 ConfigurableEnvironment 继承了 Environment,通过 ConfigurableEnvironment 实例可以调用一些系统相关配置,对于 web 容器来讲, 还可以使用 Environment 获取 Servlet 相关配置信息 web.xml 的内容。
  • ApplicatoinContext 还继承了 ListableBeanFactory, 可以使用列表的方式来管理 Bean, 还支持多层级的容器。
  • ApplicatoinContext 还继承了 ResourcePatternResolver, 该接口可以用来加载资源文件,还继承了 Message, 可管理 message 实现国际化的功能,继承 ApplicationEventPublisher 具备了事件发布能力, 容器在启动的时候, 会给自身注册一些 Listener, 这些 Listener 就是用来监听容器发布的事件, 就是所谓的监听机制。

使用注解与使用配置文件,基本注解我们配置扫描包名,基于 xml 我们要设置配置文件路径,注解与配置文件这些容器相同的一步的就是必须要调用 refresh 方法。该方法可以看作是 IOC 容器的启动方法。主要功能如:

  • 容器初始化
  • 配置解析 BeanFactoryPostProcessorBeanPostProcessor 的注册和激活
  • 国际化配置
  • Web 容器的构造等 …

ConfigurableApplicationContext 接口

ApplicationContext 接口当中所有方法都是只读的, 提供 get 方法供外界访问,需要使用子接口 ConfigurableApplicationContext 赋与 ApplicationContext 可配置的能力,ConfigurableApplicationContext 继承了两个接口 LiftcycleCloseableLiftcycle 接口主要用于对容器生命周期的管理, Closeabled 在关闭容器的时候 释放相关资源。

image-20220102150341332

Lifecycle.java

image-20220102150357368

Closeable.java

image-20220102150415869

主要新增了两个方法 refreshclose 具备启动刷新和关闭上下文的能力,在 ApplicationContext 被关闭的情况下 refresh 可以重新启动容器, 它还可以清楚缓存并重新装载配置信息。

image-20220102150603190

ConfigurableApplicationContext 的实现类 AbstractApplicationContext 它是 Spring 高级容器中最重要的一个类,它里面定义了 ApplicationContext 中简单不易动的部分,主要内容如:

  • 容器工厂的处理:AbstractApplicationContext
  • 事件的发送广播:publishEvent
  • 监听器的注册:registerListeners
  • 容器初始化:refresh

它几乎把容器部分的逻辑都实现了。

image-20220102150858233

ApplicationContext 常用实现

FileSystemXmlApplicationContext

用于解析文件系统中 XML 配置文件, 文件的路径可以是具体的文件路径,例如:xxx/application.xml,也可以是 ant 风格的配置,例如:xxx/*-context.xml

ClassPathXmlApplicationContext

从 classpaath 加载 BeanDefinition 相关资源,设置 classPath 的目的在于告诉 Java 执行环境, 在哪些目录下可以找到我们想要执行的类或者包, 是用于处理类路径下的 XML 配置文件。

XmlWebApplicationContext

用于 Web 应用程序的容器。

AnnotationConfigServletWebServerApplicationContext

这个不在 Spring 框架的模块中, 它存在 SpringBoot 的 Boot 模块下。

AnnotationConfigReactiveWebServerApplicationContext

对于响应式的编程,来满足响应式的容器需求,也是在 SpringBoot 当中。

AnnotationConfigApplicationContext

对于普通的非 Web 应用我们基本上使用的都是这一个。

posted @   BNTang  阅读(194)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
历史上的今天:
2021-01-02 C
点击右上角即可分享
微信分享提示