《学会 SpringBoot 系列 · ConfigurableApplicationContext 详解》

news2024/12/26 20:56:28

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

文章目录

    • 写在前面的话
    • ConfigurableApplicationContext
    • 总结陈词

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2042897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WordPress多用途电子商务博客新闻主题betheme 21.5.6版本

简介: WordPress多用途电子商务博客新闻主题betheme 21.5.6版本 自带500多套模板 BeTheme第一次发布于2014年5月21日,自那时以来,已有数以百万计的人下载了BeTheme,其评分为4.8。 这个主题是WooCommerce支持的,在此…

UniApp第一天

一、官网介绍 1.1、 SDK SDK是"Software Development Kit"的缩写,中文意思是“软件开发工具包”。SDK通常是由软件开发者为其他开发者提供的一个软件工具集合,用于帮助开发者快速开发、测试和部署软件应用。SDK通常包含了一系列的开发工具、库…

让3岁小孩都能理解LeetCode每日一题_3148.矩阵中的最大得分

解释说明&#xff1a; 上面的内容的意思是为了有只移动一次的情况&#xff0c;而后面的grid&#xff08;i,j)-grid(i,k)由于j严格大于k,所以至少移动了一次&#xff0c;前面可以保持不移动&#xff0c;不移动就是选择0。 class Solution {public int maxScore(List<List&l…

倍福EAP协议应用讲解

倍福EAP协议应用讲解 前言 倍福提供了用于在以太网上进行实时通信的EtherCAT协议&#xff0c;EtherCAT协议属于现场层协议&#xff0c;即具有主从结构&#xff0c;通信只能由主站发起&#xff0c;从站不具备发起通信的功能&#xff0c;只能被动接收数据并插入数据到通信帧中。…

Java基础之switch分支语句

switch分支语句 ​ switch语句也称为分支语句&#xff0c;其和if语句有点类似&#xff0c;都是用来判断值是否相等&#xff0c;但switch默认只支持byte、short、int、char这四种类型的比较&#xff0c;JDK8中也允许String类型的变量做对比。 语法&#xff1a; switch (表达式…

了解数据库中常用存储引擎数据结构(3)

接上文了解数据库中常用存储引擎数据结构&#xff08;2&#xff09;-CSDN博客 目录 CoW BTree 补充&#xff1a;写入时复制&#xff08;Copy-on-write&#xff0c;简称COW&#xff09;是一种计算机程序设计领域的优化策略&#xff1b; Lazy BTree&#xff08;惰性BTree&…

【Linux】缓冲区和文件系统

目录 一、缓冲区 1.1 概念 1.2 用户缓冲区和内核缓冲区 二、磁盘的结构 三、文件系统 3.1 初识“块”和inode 3.2 磁盘分区和文件系统 一、缓冲区 1.1 概念 要理解什么是缓冲区&#xff0c;先看这段代码 #include <stdio.h> #include <string.h> #includ…

OpenTelemetry:新一代的开源可观测性标准

OpenTelemetry是由OpenTracing和OpenCensus两个开源项目合并而成&#xff0c;由云原生计算基金会&#xff08;CNCF&#xff09;托管。该项目旨在提供一套标准化的、跨语言的观测性工具&#xff0c;帮助开发人员和运维人员更好地理解和管理分布式系统的性能和行为。通过统一的Me…

html5宠物网站模板源码

文章目录 1.设计来源1.1 主界面1.2 主界面菜单1.3 关于我们界面1.4 宠物照片墙界面1.5 宠物博客界面1.6 宠物服务界面1.7 宠物团队界面1.8 联系我们界面 2.效果和源码2.1 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 【博主推荐】&a…

微信小程序同城信息共享

前端uniapp 后端thinkphp 热乎的纯手工代码

机械学习—零基础学习日志(如何理解线性代数3)

零基础为了学人工智能&#xff0c;正在快乐学习&#xff0c;每天都长脑子 行列式 最早行列式&#xff0c;是莱布尼茨用于判断&#xff0c;一个方程有没有解。例如&#xff0c;三元一次方程&#xff0c;如果有解&#xff0c;对应行列式就有值&#xff0c;但是如果无解&#xf…

一篇文章理清Java持久化脉络(关于JDBC、JPA、Hibernate、Spring Data JPA)

Java持久化 一、JDBC、JPA、Spring Data JPA 的定义及关系二、JDBC&#xff08;古老的东西&#xff0c;只需简单知道是啥&#xff09;1.1 JDBC概念1.2 JDBC示例 三、JPA&#xff08;第二代持久化&#xff0c;代表是Hibernate等框架&#xff09;3.1 JPA概念3.2 JPA示例 四、Spri…

GB/T 38082-2019 生物降解塑料购物袋检测

生物降解塑料购物袋是指以生物降解树脂为主要原料制得的&#xff0c;具有提携结构的&#xff0c;在销售、服务等场所用于盛装及携提商品的袋制品。 GB/T 38082-2019 生物降解塑料购物袋检测项目&#xff1a; 检测项目 测试标准 尺寸偏差 GB/T 38082 感官 GB/T 38082 提掉…

html+css+js网页设计 大一电商6个页面 带js 有轮播图,增删改查等功能

htmlcssjs网页设计 大一电商6个页面 带js 有轮播图&#xff0c;增删改查等功能 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等…

JTAG标准笔记:IEEE1149.1、IEEE1149.4、IEEE1149.5、IEEE1149.6、 IEEE1500等协议之前的发展和联系

JTAG (Joint Test Action Group) 是一种串行通信协议。对于典型的串行通信&#xff0c;总线较少&#xff0c;线路数通常为1到4条&#xff0c;数据是以位为单位依次传输的。笔记中大部分图片来自JTAG标准介绍UP的视频 IEEE 1149.1&#xff0c;通常称为JTAG&#xff08;Joint Tes…

安防监控/视频汇聚平台EasyCVR如何配置,实现默认获取设备的子码流?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构&#xff0c;兼容性强、支持多协议接入&#xff0c;包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…

设计模式22-迭代器模式

设计模式22-迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;动机定义结构定义结构结构图解释注意事项 C代码推导多态属性&#xff08;虚函数&#xff09;实现迭代器1. **返回值问题**2. **对象切割问题**3. **内存管理问题**4. **迭代器生命周期问题**5. **接口…

static、extern,const关键字

1、static关键字 static关键字&#xff1a;延长生命周期&#xff0c;限制作用域 static修饰局部变量&#xff1a;静态局部变量 static修饰全局变量&#xff1a;静态全局变量 static修饰函数&#xff1a;静态函数 2、extern关键字 extern&#xff1a;引用其他文件 .c 中的全局…

对敲期权组合如何操作?

对敲期权组合按照你说的对沖敲出期权应该是一种期权套利行为&#xff0c;在买入的同时卖出一个执行价格不同的期权进行对冲&#xff0c;或者在卖出一张期权合约的时候同时买进一张执行价不动的同类期权进行对中&#xff0c;这样亏报有限&#xff0c;是种套利行为&#xff0c;下…

Java基础之进制转换

1 进制基础 概念&#xff1a; ​ 进制就是进位制&#xff0c;是人们规定的一种进位方法&#xff0c;二进制逢2进1&#xff0c;八进制是逢8进1&#xff0c;十进制逢10进1&#xff0c;十六进制逢16进1。 不同进制形式&#xff1a; 二进制 0b或0B开头&#xff0c;由0和1组成 八…