Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深入解析Spring框架的ApplicationContext体系结构

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

原创
作者头像
杨不易呀
发布于 2023-09-26 13:26:24
发布于 2023-09-26 13:26:24
6900
举报
文章被收录于专栏:杨不易呀杨不易呀

前言

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

体系结构图

image-20220102145024080
image-20220102145024080

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

image-20220102145151687
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
image-20220102150341332

Lifecycle.java

image-20220102150357368
image-20220102150357368

Closeable.java

image-20220102150415869
image-20220102150415869

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

image-20220102150603190
image-20220102150603190

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

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

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

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

最后

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

点赞
点赞

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

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【死磕 Spring】----- ApplicationContext 相关接口架构分析
在前面 30 多篇博客中都是基于 BeanFactory 这个容器来进行分析的,BeanFactory 容器有点儿简单,它并不适用于我们生产环境,在生产环境我们通常会选择 ApplicationContext ,相对于大多数人而言,它才是正规军,相比于 BeanFactory 这个杂牌军而言,它由如下几个区别:
用户1655470
2019/03/06
1.2K0
【死磕 Spring】----- ApplicationContext 相关接口架构分析
【小家Spring】BeanFactory体系和ApplicationContext体系,两大体系各接口分析、区别和联系
前面已经讲述了很多Spring容器启动、解析、依赖注入等等源码层面的东西了,但是小伙伴有没有一种感觉就是:Spring的设计者把面向对象使用到了极致(使用得非常的好),并且它吧职责单一原则也是使用到了极致。
YourBatman
2019/09/03
1.9K0
【小家Spring】BeanFactory体系和ApplicationContext体系,两大体系各接口分析、区别和联系
Spring官网阅读(十三)ApplicationContext详解(下)
前面我们也提到了ApplicationContext继承了BeanFactory接口,其继承关系如下:
程序员DMZ
2020/07/06
1.4K0
SpringBoot源码解析(七):应用上下文结构体系
SpringBoot源码解析(二):引导上下文DefaultBootstrapContext
Java微观世界
2025/01/20
2780
SpringBoot源码解析(七):应用上下文结构体系
深入理解Spring容器体系结构「建议收藏」
在 spring 中,任何实现了 BeanFactory 接口的类都可以视为容器,它是 IOC 功能实现的核心,用于完成类实例从加载到销毁的整个生命周期的控制,这些被 spring 所管理的实例统称为 bean。
全栈程序员站长
2022/09/23
5440
深入理解Spring容器体系结构「建议收藏」
Spring Boot启动过程分析
首先贴一张很不错的图,SpringBoot启动结构图,图片出自SpringBoot启动流程解析。 本文的分析基于Spring Boot 2.1.5,非Spring的代码只有下面这个启动main函数:
爱撸猫的杰
2020/03/08
1.2K0
Spring Boot启动过程分析
Spring Boot(6) 原理和启动流程四、ApplicationContextInitializer、ApplicationContextAware、ApplicationContext、App
SpringBoot是一个快速开发框架,目的是解放java程序猿的生产力,提高开发效率。主要特点: 1、整合依赖:通过Maven,快速的将一些常用的第三方依赖整合。 2、简化配置:简化XML配置,全部采用注解形式。 3、集成web容器:内置Http服务器(Jetty和Tomcat),最终以java应用程序进行执行。 简化Spring应用的创建、运行、调试、部署的工作,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置。
黄规速
2022/04/14
1.7K0
Spring Boot(6) 原理和启动流程四、ApplicationContextInitializer、ApplicationContextAware、ApplicationContext、App
SpringBoot 通过SpringApplication 引导启动
SpringApplication类是用来执行Spring框架启动的引导类。有两种方式可以进行启动引导:
猫头虎
2024/04/07
2660
SpringBoot 通过SpringApplication 引导启动
Spring-ApplicationContext解读
Spring通过一个配置文件描述Bean和Bean之间的依赖关系,利用Java反射功能实例化Bean,并建立Bean之间的依赖关系。
小小工匠
2021/08/16
4670
Spring框架专题
我们一般说的Spring框架指的都是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,Web、AOP(面向切面编程)、工具、消息和测试模块。
Steve Wang
2022/05/10
6210
Spring框架专题
关于Spring体系的各种启动流程
不管是哪种系列的spring(springframework、springmvc、springboot、springcloud),Spring的启动过程主要可以分为两部分:
tunsuy
2022/10/27
1.3K0
从 SpringApplication 认识 Spring 应用启动过程
BootstrapRegistryInitializer:回调接口,用于 BootstrapRegistry 初始化。
WindWant
2023/06/18
6170
【Spring源码解读 底层原理高级进阶】【上】探寻Spring内部:BeanFactory和ApplicationContext实现原理讲解
本篇文章的目标,在于通过深入剖析Spring框架的源码,不仅让读者亲身体验到Spring设计大师们的卓越智慧,同时也分享我对其设计哲学所引发的思考与感悟。
苏泽
2024/03/01
3790
springbootapplication运行机制_航空器运行阶段是指什么
SpringApplication运行阶段围绕run(String …)方法展开,该过程结合初始化阶段完成的状态进一步完善了运行时所需要准备的资源,随后启动Spring应用上下文,在此期间伴随Spring Boot和Spring事件的触发,形成完整的SpringApplication生命周期:
全栈程序员站长
2022/10/01
6560
springbootapplication运行机制_航空器运行阶段是指什么
【Spring Boot 源码学习】SpringApplication 的 run 方法核心流程介绍
开始之前,引用一篇《10分钟了解Docker,告别复杂配置》,该文从Docker平台介绍、常用命令、部署微服务项目、使用场景和模拟场景等方面详细介绍Docker,有需要的朋友可以参考下
huazie
2024/11/15
4370
【Spring Boot 源码学习】SpringApplication 的 run 方法核心流程介绍
Spring源码之核心容器
SpringBean的创建是典型的工厂模式,这一系列的Bean工厂,也即IOC容器为开发者管理对象间的依赖关系提供了很多便利和基础服务,在Spring中有许多的IOC容器的实现供用户选择和使用,其相互关系如下:
Java阿呆
2020/11/04
4100
Spring源码之核心容器
Springboot源码_pe启动制作源码
一个是@SpringBootApplication,参考另一篇文章SpringBoot自动配置实现原理及源码解析(2.3.x) 另一个关键点是SpringApplication.run()方法,这是一个静态方法,我们详细看下代码:
全栈程序员站长
2022/09/25
9680
Springboot源码_pe启动制作源码
三万字盘点Spring 9大核心基础功能
其实我不是不写,而是一直在写这篇文章,只不过令我没想到的是,从前期的选题、准备、翻源码、动手到写完,前后跨度接近一个月的时间,花了好几个周末,写了三万字,最终才算完成。
三友的java日记
2023/08/18
4330
三万字盘点Spring 9大核心基础功能
详细简明的介绍SpringBoot启动过程源码分析
上一篇我们介绍了SpringBoot的自动装配的知识,这一篇我们将介绍SpringBoot最核心的知识点,SpringBoot应用的启动过程。这个启动过程比较复杂,在此我只介绍核心的知识点。其启动过程大概分为两步。1. 初始化SpringApplication对象,2.执行SpringApplication对象的run方法。
码农飞哥
2021/08/18
5620
理解Spring容器、BeanFactory和ApplicationContext
spring容器可以理解为生产对象(OBJECT)的地方,在这里容器不只是帮我们创建了对象那么简单,它负责了对象的整个生命周期--创建、装配、销毁。而这里对象的创建管理的控制权都交给了Spring容器,所以这是一种控制权的反转,称为IOC容器,而这里IOC容器不只是Spring才有,很多框架也都有该技术。
用户7353950
2023/02/23
8570
理解Spring容器、BeanFactory和ApplicationContext
推荐阅读
相关推荐
【死磕 Spring】----- ApplicationContext 相关接口架构分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档