Spring学习上下文【ConfigurableApplicationContext】

话不多说,先上图:
applicationContext继承关系图

ConfigurableApplicationContext是Spring框架中的一个接口,它继承了ApplicationContext接口,并扩展了一些额外的方法,用于允许应用程序在运行时动态地修改和管理应用上下文。ConfigurableApplicationContext接口提供了设置上下文ID、设置父应用上下文、添加监听器、刷新容器、关闭和判断是否活跃等方法。
此外,ConfigurableApplicationContext还新增了两个主要方法:refresh()和close(),使得ApplicationContext具有启动、刷新和关闭的功能。

从继承层次上看,ApplicationContext是ConfigurableApplicationContext的父接口,因为它定义了ApplicationContext的基本功能和行为。因此,ConfigurableApplicationContext包含了ApplicationContext的所有功能。这意味着在Spring框架的设计中,ConfigurableApplicationContext位于ApplicationContext的基础之上,为应用程序提供了更多的灵活性和动态配置能力。

ConfigurableApplicationContext与ApplicationContext的具体区别是什么?
  1. 接口继承关系:ApplicationContext是一个接口,而ConfigurableApplicationContext是它的子接口。这意味着ConfigurableApplicationContext继承了ApplicationContext的功能,但提供了更多的配置选项。

  2. 方法访问权限:ApplicationContext接口提供的方法都是只读的,不允许直接访问。只有通过子接口ConfigurableApplicationContext,才能对这些方法进行配置。

  3. 返回值类型:当调用ApplicationContext的run方法时,实际上是返回一个类型为ConfigurableApplicationContext的对象,这个对象可以用来配置应用程序的上下文。

  4. 配置能力:ConfigurableApplicationContext提供了修改bean定义、激活环境、注册shut-down hook等能力,这些都是ApplicationContext所没有的功能。

  5. 资源管理:ConfigurableApplicationContext还涉及到资源管理的问题,例如解决资源泄漏问题时,需要导入特定的包以使用ConfigurableApplicationContext的强转类型。

  6. Web应用场景:ConfigurableApplicationContext也支持Web应用场景,与WebApplicationContext一起,构成了Spring应用框架的核心组成部分。

ConfigurableApplicationContext相比于ApplicationContext,增加了更多的配置能力,如修改bean定义、激活环境等,同时也支持Web应用场景,是Spring框架中不可或缺的一部分。

如何在Spring框架中使用ConfigurableApplicationContext进行动态配置?
  1. 创建ConfigurableApplicationContext对象:首先需要创建一个ConfigurableApplicationContext对象。这是因为ConfigurableApplicationContext是应用的上下文信息,其中包含了Environment环境信息。可以通过SpringApplication.run ()方法来启动应用程序,并使用spring.servlet.multipart.location 配置来指定应用运行时的文件传输方式。

  2. 使用ApplicationContextInitializer进行初始化:ApplicationContextInitializer是Spring框架中的一个概念,它的主要目的是在ConfigurableApplicationContext类型(或者子类型)的ApplicationContext上执行refresh操作。这意味着可以在应用程序启动时,通过调用ApplicationContextInitializer.init ()方法来初始化ApplicationContext,从而为应用程序提供动态配置的能力。

  3. 动态刷新配置:Spring Cloud提供了配置管理和动态监听的机制,允许开发者动态更新配置。这包括自定义刷新事件和强制刷新上下文等方式,以实现更灵活的配置更新。例如,可以通过配合RefreshScope实现自动刷新配置,或者通过创建一个新的ConfigurableApplicationContext进行配置的加载和刷新。

  4. 动态获取配置参数:Spring Boot提供了多种方式动态获取配置参数,如通过application.properties 或application.yml 文件定义配置参数,然后通过注解在代码中读取这些参数。这种方式适用于需要在运行时动态调整配置的场景。

使用ConfigurableApplicationContext进行动态配置主要涉及到创建ConfigurableApplicationContext对象、使用ApplicationContextInitializer进行初始化、动态刷新配置以及动态获取配置参数等步骤。这些方法可以帮助开发者根据实际需求动态地调整应用的配置,提高开发效率和系统的灵活性。

ConfigurableApplicationContext的refresh()和close()方法具体如何实现?

ConfigurableApplicationContext的refresh()方法用于重新加载Spring应用上下文中的配置和bean定义,同时启动所有相关的bean。这个方法是通过继承AbstractApplicationContext类来实现的,因为AbstractApplicationContext作为ConfigurableApplicationContext的实现类实现了refresh()方法。具体到SpringIOC的实现,refresh()方法会在初始化时执行,以确保所有配置都被正确加载和初始化入用例中。

close()方法则用于关闭应用程序的上下文并销毁它,释放所有已经占用的资源,包括所有bean的占用的资源,关闭应用程序上下文的底层连接,关闭JVM等。这个方法可以通过创建一个新的上下文并调用close()方法来实现,或者在需要的地方执行context.close 方法来完成关闭。此外,如果想要关闭现在使用的context,最简单的方式就是使用actuator的shutdown端点,但这可能不是最优雅或最安全的方式。

ConfigurableApplicationContext的refresh()方法通过继承AbstractApplicationContext类并在实现中调用来实现,主要用于重新加载配置和启动相关bean。而close()方法则用于关闭应用上下文,释放资源并关闭底层连接等操作。

在Spring框架中,ConfigurableApplicationContext的应用场景有哪些?
  1. Web应用中的初始化:ConfigurableApplicationContext用于初始化Spring ConfigurableApplicationContext应用上下文,这是因为在Web应用中需要通过编程方式对应用上下文进行初始化。这种方式可以帮助开发者更灵活地配置应用上下文的属性和环境信息,从而提高应用的可维护性和可扩展性。

  2. 注册属性源或针对上下文的环境信息激活:ConfigurableApplicationContext还可以用于注册属性源(property sources)或者针对上下文的环境信息(environment)进行激活。这种方式允许开发者根据需要动态地配置应用上下文,以适应不同的应用需求。

  3. Spring Boot应用程序中的获取方式:Spring Boot应用程序中获取ConfigurableApplicationContext的方式,与在标准Spring应用中有所不同。在Spring Boot中,获取ConfigurableApplicationContext的方式更加灵活,提供了顶层接口Configurable和Abstract等特性,使得开发者能够更方便地管理和配置应用上下文。

ConfigurableApplicationContext在Spring框架中的应用场景主要涉及到Web应用的初始化、属性源的注册与环境的激活,以及Spring Boot应用程序的灵活性配置。这些应用场景展示了ConfigurableApplicationContext在提高开发效率和降低维护成本方面的重要作用。

ConfigurableApplicationContext与applocationContext的区别和联系是什么?

ConfigurableApplicationContext是一个可配置的应用上下文,它允许开发者通过配置文件来动态地设置应用上下文的属性,如服务器地址、数据库连接信息等。而ApplicationContext接口本身则是read-only的,这意味着它不能被修改,只能读取已有的配置信息。

联系方面,ConfigurableApplicationContext是ApplicationContext的子接口,大部分的应用上下文都实现了这个接口。这表明ConfigurableApplicationContext在Spring框架中扮演着一个基础组件的角色,为其他应用上下文提供了可定制化的能力。例如,WebApplicationContext就是基于ConfigurableApplicationContext实现的,专门用于Web应用程序中。此外,从ConfigurableApplicationContext的子类可以看出,它与AbstractApplicationContext有着紧密的联系,后者是Spring框架中最基本的应用层组件。

ConfigurableApplicationContext与ApplicationContext之间的区别在于它们的实现方式和功能,ConfigurableApplicationContext提供了更灵活的配置能力,而ApplicationContext则是Spring框架中最基础的应用上下文,两者都依赖于ConfigurableApplicationContext来实现更复杂的应用逻辑。同时,ConfigurableApplicationContext也是ApplicationContext体系中不可或缺的一部分,它通过继承自AbstractApplicationContext来与其他应用上下文进行交互。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【js】无限虚拟列表的原理及实现

什么是虚拟列表 虚拟列表是长列表按需显示思路的一种实现,即虚拟列表是一种根据滚动容器元素的可视区域来渲染长列表数据中某一个部分数据的技术。 简而言之,虚拟列表指的就是「可视区域渲染」的列表。有三个概念需要了解一下: 视口容器元…

KDD 2023 图神经网络方向论文总结

ACM SIGKDD(国际数据挖掘与知识发现大会,KDD)是数据挖掘领域历史最悠久、规模最大的国际顶级学术会议,也是首个引入大数据、数据科学、预测分析、众包等概念的会议。今年,第29届 KDD 大会在美国加州长滩举行&#xff0…

冒泡排序法的名字由来,排序步骤是什么,最坏情况下的排序次数如何计算得来的呢?

问题描述:冒泡排序法的名字由来,排序步骤是什么,最坏情况下的排序次数如何计算得来的呢? 问题解答: 冒泡排序法的名字来源于排序过程中较大的元素会像气泡一样逐渐“冒”到序列的顶端,而较小的元素则会逐…

代码随想录算法训练营第四十天 343. 整数拆分、 96.不同的二叉搜索树

代码随想录算法训练营第四十天 | 343. 整数拆分、 96.不同的二叉搜索树 343. 整数拆分 题目链接:343. 整数拆分 - 力扣(LeetCode) 例如 n 10, 可以拆分为 3 * dp[7] 。因为dp[7]之前已经计算过最大 3 * 4, 所以dp[10] 3 * 3 …

Microsoft 365自定义安装软件

如图,在安装类型的步骤的时候,可以勾选自己想要的软件(而非一股脑儿的安装一大堆自己不需要的)。

AI绘画巅峰对决:Stable Diffusion 3与DALL·E 3原理深度比较

最近,Stable Diffusion 3 的预览版已经亮相啦! 虽然这个AI绘画模型还没全面上线,但官方已经开启预览申请通道了。 https://stability.ai/stablediffusion3 而且好消息是,后面还会推出开源版本哦! 这个模型套件真的…

五种多目标优化算法(MOAHA、MOGWO、NSWOA、MOPSO、NSGA2)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 多目标优化算法是用于解决具有多个目标函数的优化问题的一类算法。其求解流程通常包括以下几个步骤: 1. 定义问题:首先需要明确问题的目标函数和约束条件。多目标优化问题通常涉及多个目标函数,这些目标函数可能…

基于SpringBoot的产业园区智慧公寓管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

这才开工没几天收到Offer了,简历改的好,找工作没烦恼。

喜报喜报 这才开工没几天,就收到了喜报! 就像上面截图中所说的一样:简历改了真的有用。 我也和大家分享一下优化简历的技巧,希望对大家有帮助,把握住金三银四的机会,都能顺利上岸,升职加薪&am…

多数pythoneer只知有列表list却不知道python也有array数组

数组和列表 Python中数组和列表是不同的,我敢断言大多数的pythoneer只知道有列表list,却不知道python也有array数组。列表是一个包含不同数据类型的元素集合,而数组是一个只能含相同数据类型的元素集合。 Python的array库是一个提供数组操作…

Android 广播的基本概念

一.广播简介 Broadcast是安卓四大组件之一。安卓为了方便进行系统级别的消息通知,引入了一套广播消息机制。打个比方,记得原来在上课的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦…

【初始RabbitMQ】交换机的实现

交换机概念 RabbitMQ消息传递模型的核心思想就是:生产者生产的消息从不会直接发送到队列。实际上,通常生产者不知道这些消息会传递到那些队列中 相反,生产者只能将消息发送到交换机,交换机的工作内容也很简单,一方面…

网络安全8-11天笔记

内容安全: 攻击可能只是一个点,防御需要全方面进行。 IAE引擎: DFI和DPI技术:深度检测技术 DPI——深度包检测技术:主要针对完整的数据包(数据包分片,分段需要重组),之…

Linux--自定义shell

shell shell就是操作系统提供给用户与操作系统进行交互的命令行界面。它可以理解为一个用户与操作系统之间的接口,用户可以通过输入命令来执行各种操作,如文件管理、进程控制、软件安装等。Shell还可以通过脚本编程实现自动化任务。 常见的Unix系统中使…

http相关概念以及apache的功能(最详细讲解!!!!)

概念 互联网:是网络的网络,是所有类型网络的母集 因特网:世界上最大的互联网网络 万维网:www (不是网络,而是数据库)是网页与网页之间的跳转关系 URL:万维网使用统一资源定位符,…

图片如何降低kb?这个方法很方便

图片体积过大的话,有两种最简单的方法可以解决,最直接的就是压缩图片大小,降低图片kb,再就是修改图片尺寸让图片体积变小,这两种操作方式都可以在本文介绍的这款图片处理工具中完成,图片压缩对我们来说最主…

利用netty手写rpc框架

前言:利用netty异步事件驱动的网络通信模型,来实现rpc通信 一、大致目录结构: 二、两个端:服务端(发布),客户端(订阅消费),上代码: 1.服务端&am…

深入学习TS的高阶语法(泛型、类型检测、内置工具)

文章目录 概要一.TS的类型检测1.鸭子类型2.严格的字面量类型检测 二.TS的泛型1.基本使用2.传递多个参数3.泛型接口4.泛型类5.泛型约束6.映射类型(了解) 三.TS的知识扩展1.模块的使用-- 内置类型导入 2.类型的查找3.第三方库的类型导入4.declare 声明文件…

Javase-数组

文章目录 1.1 为什么要使用数组1.2 数组的定义及初始化1.3 数组的使用1.4 遍历数组1.5 数组在内存中的存储分析1.6 数组的传参1.7 数组的拷贝 1.1 为什么要使用数组 假设现在有一个任务,要你存储5个同学的学习成绩(double类型),这时候我们可以写出来 double score1 90.4…等五…

谷粒商城-nginx搭建域名访问环境性能压测

nginx搭建域名访问环境 正向代理与反向代理 正向代理:客户端向代理服务器发请求并指定目标服务器,代理向目标服务器转交请求并将获得的内容返回给客户端。 反向代理:用户直接访问反向代理服务器就可以获得目标服务器的资源。反向代理服务器…