📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍
文章目录
- 写在前面的话
- ConfigurableApplicationContext
- 总结陈词
写在前面的话
此篇博文分享一下 SpringBoot 开发中,ConfigurableApplicationContext 的相关用法。
推荐文章 - 程序猿入职必会:
《程序猿入职必会(1) · 搭建拥有数据交互的 SpringBoot 》
《程序猿入职必会(2) · 搭建具备前端展示效果的 Vue》
《程序猿入职必会(3) · SpringBoot 各层功能完善 》
《程序猿入职必会(4) · Vue 完成 CURD 案例 》
《程序猿入职必会(5) · CURD 页面细节规范 》
《程序猿入职必会(6) · 返回结果统一封装》
《程序猿入职必会(7) · 前端请求工具封装》
《程序猿入职必会(8) · 整合 Knife4j 接口文档》
《程序猿入职必会(9) · 用代码生成器快速开发》
《程序猿入职必会(10) · 整合 Redis(基础篇)》
《程序猿入职必会(11) · 整合 Redis 实战运用》
推荐文章 - 学会 SpringMVC 系列
《学会 SpringMVC 系列 · 基础篇》
《学会 SpringMVC 系列 · 剖析篇(上)》
《学会 SpringMVC 系列 · 剖析入参处理》
《学会 SpringMVC 系列 · 剖析出参处理》
《学会 SpringMVC 系列 · 返回值处理器》
《学会 SpringMVC 系列 · 消息转换器 MessageConverters》
《学会 SpringMVC 系列 · 写入拦截器 ResponseBodyAdvice》
《学会 SpringMVC 系列 · 剖析初始化》
《学会 SpringMVC 系列 · 参数解析器 ArgumentResolvers》
ConfigurableApplicationContext
ConfigurableApplicationContext 和 ApplicationContext 是 Spring 框架中两个重要的接口,它们在功能和用途上有一些区别。以下是它们的主要区别:
1. 定义和功能
ApplicationContext:
ApplicationContext 是 Spring 的核心接口之一,提供了 Spring IoC 容器的基本功能。
它负责管理 Bean 的生命周期、提供依赖注入、事件传播等功能。
ApplicationContext 是一个只读的容器,通常用于获取 Bean 和处理依赖注入。
ConfigurableApplicationContext:
ConfigurableApplicationContext 是 ApplicationContext 的子接口,提供了更高级的功能。
它允许对应用上下文进行配置和管理,例如关闭上下文、注册关闭钩子、添加应用事件监听器等。
通过 ConfigurableApplicationContext,你可以在运行时对上下文进行一些动态的配置。
2. 主要方法
ApplicationContext:
提供了获取 Bean、国际化支持、事件发布等基本功能的方法,如 getBean(), publishEvent(), getMessage(), 等。
ConfigurableApplicationContext:
除了继承自 ApplicationContext 的方法外,还提供了以下方法:
refresh(): 刷新应用上下文。
close(): 关闭应用上下文。
registerShutdownHook(): 注册一个 JVM 关闭钩子,以便在 JVM 关闭时自动关闭上下文。
addApplicationListener(ApplicationListener listener): 添加应用事件监听器。
3. 使用场景
ApplicationContext:
当你只需要基本的 IoC 容器功能时,可以使用 ApplicationContext。例如,在大多数情况下,使用 AnnotationConfigApplicationContext 或 ClassPathXmlApplicationContext 来创建上下文。
ConfigurableApplicationContext:
当你需要对上下文进行更复杂的管理或配置时,使用 ConfigurableApplicationContext。例如,在需要手动刷新或关闭上下文的场景中,或者在应用程序启动时需要注册一些钩子或监听器时。
4、补充介绍
在 Spring Boot 项目中,ApplicationContext 是一个接口,表示Spring的应用上下文。
而 ConfigurableApplicationContext 是 ApplicationContext 的一个子接口,提供了一些额外的功能,比如关闭上下文、注册关闭钩子等。
在 Spring Boot 中,通常情况下,ApplicationContext 可以被转换为 ConfigurableApplicationContext,前提是你使用的上下文实现类是 ConfigurableApplicationContext 的实现。例如,Spring Boot 默认使用的上下文实现是 AnnotationConfigApplicationContext 或 GenericWebApplicationContext,这两者都实现了 ConfigurableApplicationContext。
Tips:总结,SB中,基本可以这么用,但代码还是尽量按下面这样判断一下。
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
public class Example {
public void exampleMethod(ApplicationContext applicationContext) {
if (applicationContext instanceof ConfigurableApplicationContext) {
ConfigurableApplicationContext configurableContext = (ConfigurableApplicationContext) applicationContext;
// 现在可以使用ConfigurableApplicationContext的方法
} else {
// 处理不是ConfigurableApplicationContext的情况
}
}
}
//自定义实现 ShutdownEndpoint,也是利用这个方式
private ConfigurableApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
if (context instanceof ConfigurableApplicationContext) {
this.context = (ConfigurableApplicationContext) context;
}
}
总结陈词
💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。