《学会 SpringBoot 系列 · ConfigurableApplicationContext 详解》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

CSDN.gif

写在前面的话

此篇博文分享一下 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;
    }
}


总结陈词

💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

CSDN_END.gif

  • 35
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战神刘玉栋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值