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 容器的启动方法。主要功能如:
BeanFactoryPostProcessor
和 BeanPostProcessor
的注册和激活在 ApplicationContext
接口当中所有方法都是只读的, 提供 get 方法供外界访问,需要使用子接口 ConfigurableApplicationContext
赋与 ApplicationContext
可配置的能力,ConfigurableApplicationContext
继承了两个接口 Liftcycle
与 Closeable
,Liftcycle
接口主要用于对容器生命周期的管理, Closeabled
在关闭容器的时候 释放相关资源。
Lifecycle.java
Closeable.java
主要新增了两个方法 refresh
与 close
具备启动刷新和关闭上下文的能力,在 ApplicationContext
被关闭的情况下 refresh
可以重新启动容器, 它还可以清楚缓存并重新装载配置信息。
ConfigurableApplicationContext
的实现类 AbstractApplicationContext
它是 Spring 高级容器中最重要的一个类,它里面定义了 ApplicationContext
中简单不易动的部分,主要内容如:
AbstractApplicationContext
publishEvent
registerListeners
refresh
它几乎把容器部分的逻辑都实现了。
用于解析文件系统中 XML 配置文件, 文件的路径可以是具体的文件路径,例如:xxx/application.xml
,也可以是 ant
风格的配置,例如:xxx/*-context.xml
。
从 classpaath 加载 BeanDefinition 相关资源,设置 classPath 的目的在于告诉 Java 执行环境, 在哪些目录下可以找到我们想要执行的类或者包, 是用于处理类路径下的 XML 配置文件。
用于 Web 应用程序的容器。
这个不在 Spring 框架的模块中, 它存在 SpringBoot 的 Boot 模块下。
对于响应式的编程,来满足响应式的容器需求,也是在 SpringBoot 当中。
对于普通的非 Web 应用我们基本上使用的都是这一个。
本期结束咱们下次再见👋~
🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。