深入解析Spring框架的ApplicationContext体系结构

简介: 深入解析Spring框架的ApplicationContext体系结构

前言


ApplicationContext体系结构是Spring框架的关键组成部分,它提供了一个容器,用于管理和配置应用程序中的对象(称为Bean)。这个容器在应用程序生命周期中加载、配置和管理Bean,支持依赖注入和面向切面编程等功能,从而实现了松耦合、可维护和可扩展的Java应用程序。ApplicationContext还提供了对国际化、事件传播和资源处理等特性的支持,使Spring成为一个强大的企业级应用程序开发框架。



体系结构图



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


  • 它继承了 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 在关闭容器的时候 释放相关资源。


Lifecycle.java


Closeable.java


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

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


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

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





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 应用我们基本上使用的都是这一个。




最后


本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
2月前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
241 2
|
2月前
|
缓存 安全 Java
Spring Security通用权限管理模型解析
Spring Security作为Spring生态的核心安全框架,结合RBAC与ACL权限模型,基于IoC与AOP构建灵活、可扩展的企业级权限控制体系,涵盖认证、授权流程及数据库设计、性能优化等实现策略。
222 0
|
1月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
1月前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。
|
1月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
116 8
|
2月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
729 1
|
Java Spring 容器
获取Spring的ApplicationContext的几种方式
简单来说就是Spring中的高级容器,可以获取容器中的各种bean组件,注册监听事件,加载资源文件等功能。
242 0
获取Spring的ApplicationContext的几种方式
|
Java 容器 Spring
获取Spring的ApplicationContext的几种方式
Application Context定义 简单来说就是Spring中的高级容器,可以获取容器中的各种bean组件,注册监听事件,加载资源文件等功能。 具体定义可以参考官网:https://spring.
1082 0

推荐镜像

更多
  • DNS