【spring】FileSystemXmlApplicationContext 类学习

上一篇我们一起学习了

FileSystemXmlApplicationContext介绍AnnotationConfigApplicationContext 。

【spring】AnnotationConfigApplicationContext 类学习_annotationconfigapplicationcontext方法-CSDN博客

FileSystemXmlApplicationContext是一个用于加载和刷新基于XML配置文件的应用程序上下文的类。 FileSystemXmlApplicationContext类继承自AbstractApplicationContext,实现了ApplicationContext接口。它提供了一种在文件系统上查找和加载XML配置文件的方式,这使得开发者可以轻松地管理和更新应用程序的配置。 使用FileSystemXmlApplicationContext的步骤通常如下:

  1. 创建一个配置文件路径的列表,这些路径指向应用程序的XML配置文件。
  2. 创建FileSystemXmlApplicationContext实例,将配置文件路径列表作为构造函数参数传入。
  3. 调用refresh()方法来启动Spring容器,加载和处理配置文件,初始化和注册bean。
  4. 通过调用getBean()方法从应用程序上下文中获取bean,并使用它们构建应用程序。

源码截图

构造函数源代码

    /*** 单配置文件加载* configLocation 包含了 BeanDefinition 所在的文件路径** @param configLocation* @throws BeansException*/public FileSystemXmlApplicationContext (String configLocation) throws BeansException {this (new String[]{configLocation}, true, null);}/*** 多配置文件加载* 可以定义多个 BeanDefinition 所在的文件路径** @param configLocations* @throws BeansException*/public FileSystemXmlApplicationContext (String... configLocations) throws BeansException {this (configLocations, true, null);}/*** 类路径和文件系统混合加载* 在定义多个 BeanDefinition 所在的文件路径 的同时,还能指定自己的双亲 IoC 容器** @param configLocations* @param parent* @throws BeansException*/public FileSystemXmlApplicationContext (String[] configLocations, ApplicationContext parent) throws BeansException {this (configLocations, true, parent);}public FileSystemXmlApplicationContext (String[] configLocations, boolean refresh) throws BeansException {this (configLocations, refresh, null);}/*** 如果应用直接使用 FileSystemXmlApplicationContext 进行实例化,则都会进到这个构造方法中来*/public FileSystemXmlApplicationContext (String[] configLocations, boolean refresh, ApplicationContext parent)throws BeansException {// 动态地确定用哪个加载器去加载我们的配置文件super (parent);// 告诉读取器 配置文件放在哪里,该方法继承于爷类 AbstractRefreshableConfigApplicationContextsetConfigLocations (configLocations);if (refresh) {// 容器初始化refresh ();}}/*** 实例化一个 FileSystemResource 并返回,* 本方法是在其父类 DefaultResourceLoader的getResource 方法中被调用的,*/@Overrideprotected Resource getResourceByPath (String path) {if (path != null && path.startsWith ("/")) {path = path.substring (1);}return new FileSystemResource (path);}
 FileSystemXmlApplicationContext (String configLocation)

参数:configLocation(String类型),这是XML配置文件的路径。它可以根据提供的路径加载单个或多个XML配置文件。如果路径包含逗号分隔的字符串,那么它将加载所有指定的配置文件。

示例代码:
ApplicationContext context = new FileSystemXmlApplicationContext("path/spring-config.xml");
FileSystemXmlApplicationContext (String... configLocations)

参数:configLocations(String数组类型),这是一个包含多个XML配置文件路径的数组。它会加载数组中指定的所有配置文件。

示例代码:
ApplicationContext context = new FileSystemXmlApplicationContext(new String[] {"path/spring-config1.xml", "path/spring-config2.xml"});
 FileSystemXmlApplicationContext (String[] configLocations, ApplicationContext parent) 

这个构造函数除了接受一组配置文件位置外,还接受一个父级ApplicationContext对象。这样可以创建一个具有父子上下文关系的层次结构,子上下文可以从父上下文中继承配置和共享Bean。

 FileSystemXmlApplicationContext (String[] configLocations, boolean refresh) 

它允许开发者指定一个配置文件路径数组和一个刷新标志来创建一个应用程序上下文实例。

  • String[] configLocations: 这是一个字符串数组,包含了要加载的Spring配置文件的路径。这些路径可以是文件系统中的绝对路径或相对路径,也可以是URL。数组中的每个元素都是一个有效的文件路径,上下文将会尝试加载这些路径指向的配置文件。
  • boolean refresh: 这是一个布尔值,指示是否在创建上下文实例后立即刷新上下文。如果设置为true,那么在构造函数执行完毕后,上下文会自动调用refresh()方法,这将触发上下文的初始化过程,包括加载配置文件、解析Bean定义、注册Bean以及执行任何初始化相关的回调。
示例代码:
public static void main(String[] args) {try {// 定义Spring配置文件的路径数组String[] configLocations = {"file:/path/spring-config1.xml","file:/path/spring-config2.xml"};// 创建FileSystemXmlApplicationContext实例// 这里设置refresh为true,表示在创建上下文后立即刷新上下文ApplicationContext context = new FileSystemXmlApplicationContext(configLocations, true);// 从上下文中获取Bean实例DemoBean demoBean= (DemoBean) context.getBean("demoBean");// 使用获取到的demoBeandemoBean.test();} catch (Exception e) {e.printStackTrace();}}

FileSystemXmlApplicationContext (String[] configLocations, boolean refresh, ApplicationContext parent)

这个构造函数提供了最大的灵活性。它允许你指定是否在创建上下文后立即刷新上下文(这将加载所有的bean定义并启动上下文的生命周期),以及是否指定一个父上下文。

FileSystemXmlApplicationContext通过调用其父类AbstractApplicationContext的 refresh() 函数启动整个IOC容器对Bean定义的载入过程,下一篇我们好好聊聊。Spring IOC容器对Bean定义资源的载入是从refresh()函数开始的,refresh()是一个模板方法,refresh()方法的作用是:
在创建IOC容器前,如果已经有容器存在,则需要把已有的容器销毁和关闭,以保证在refresh之后使用的是新建立起来的IOC容器。
refresh的作用类似于对IOC容器的重启,在新建立好的容器中对容器进行初始化,对Bean定义资源进行载入。




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

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

相关文章

四种常用限流算法、固定窗口限流算法、滑动窗口限流算法、漏桶限流算法和令牌桶限流算法

什么是限流? 限流可以被视为服务降级的一种形式,其核心目标是通过控制输入和输出流量来保护系统。通常,一个系统的处理能力是可以预估的,为了确保系统的稳定运行,当流量达到预定的阈值时,必须采取措施限制进…

【MagicDrive环境配置】新手配俩星期版

1.创建一个新的环境conda create -n newdrive python3.8 2.激活该环境conda activate newdrive 3.下载MagicDrive源码 git clone --recursive https://github.com/cure-lab/MagicDrive.git,如果出现时间超时八成是网的问题,直接自己下载解压就好 3.我的…

WinServer启用Hyper-V新建虚拟机没有网络、无法开启增强模式

没有网络问题如下: 原因:没有在Hyper-V中新增交换机 操作—虚拟交换机管理器—新建虚拟网络交换机-外部-允许管理员操作系统共享此网络适配器 无法开启增强模式:

Nginx第三方模块---nginx-sticky-module的使用(基于cookie的会话保持)

目录 Nginx和Sticky介绍 编译安装sticky的nginx环境 安装过程碰到的问题和编译安装过程遇到的错误: (1)第一个错误:修改源代码ngx_http_sticky_module.c (2)第二个错误:修改源代码ngx_http_s…

李宏毅【生成式AI导论 2024】第5讲 让语言模型彼此合作,把一个人活成一个团队

GPD4,它也有非常强大的能力。但是GPT4如果跟其他的语言模型合作,他们其实可以发挥1加1大于二的力量。 为什么要让模型合作? 那怎么让模型彼此合作呢?有很多不同的方式。一个可能性是假设你现在手边就有一堆语言模型,他们可能有不同的能力使用,他们可能有不同的成本局来…

骗子查询系统源码

源码简介 小权云黑管理系统 V1.0 功能如下: 1.添加骗子,查询骗子 2.可添加团队后台方便审核用 3.在线反馈留言系统 4.前台提交骗子,后台需要审核才能过 5.后台使用光年UI界面 6.新增导航列表,可给网站添加导航友链 7.可添加云黑类…

Obsidian插件-高亮块(Admonition)

在插件市场里面搜索Admonition并安装插件,就可以使用高亮块了。 添加高亮块 用法稍微有一些不同。按照下面的格式,输入Markdown就可以创建一个高亮块。 内容内容内容输入*ad-*会出现相应的类型可以选择

linux 内存介绍

大致共有四类:VSS、RSS、PSS、USS ,通常情况下,VSS > RSS > PSS > USS 1.VSS(Virtual Set Size)虚拟耗用内存(包含共享库占用的内存) VSS表示一个进程可访问的全部内存地址空间的大小。这个大小包括了进程已…

Mysql数据库-DQL查询

Mysql数据库-DQL基本查询 1 DQL基本查询1.1 基础查询1.2 WHERE子句1)算术运算符2)逻辑运算符3)比较运算符A)BETWEEN... AND ...B)IN(列表)C)NULL值判断 4)综合练习 2 DQL高级查询2.1 LIKE 模糊查…

Linux:Jenkins:参数化版本回滚(6)

上几章我讲到了自动集成和部署 Linux:Jenkins全自动持续集成持续部署(4)-CSDN博客https://blog.csdn.net/w14768855/article/details/136977106 当我们觉得这个页面不行的时候,需要进行版本回滚,回滚方法我这里准备了…

【C语言】编译和链接----预处理详解【图文详解】

欢迎来CILMY23的博客喔,本篇为【C语言】文件操作揭秘:C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】,感谢观看,支持的可以给个一键三连,点赞关注收藏。 前言 欢迎来到本篇博客&…

Swagger添加JWT验证(ASP.NET)

文章目录 JWT1、解析2、配置JWT JWT 1、解析 1)客户端向授权服务系统发起请求,申请获取“令牌”。 2)授权服务根据用户身份,生成一张专属“令牌”,并将该“令牌”以JWT规范返回给客户端 3)客户端将获取到的…

【C语言基础】:数据在内存中的存储

文章目录 一、整数在内存中的存储二、大小端字节序和字节序判断1. 为什么有大小端?2. 练习 三、浮点数在内存中的存储1. 浮点数的存储1.1 浮点数的存储过程1.2 浮点数取的过程 四、题目解析 书山有路勤为径,学海无涯苦作舟。 创作不易,宝子们…

牛客NC26 括号生成【中等 递归 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca 思路 答案链接:https://www.lintcode.com/problem/427/solution/16924 参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参…

从小白-入门-进阶-高阶,四个阶段详细讲解单片机学习路线!

大家好,今天给大家介绍从小白-入门-进阶-高阶,四个阶段详细讲解单片机学习路线!,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 单片机学习路…

冥想打坐睡觉功法

睡觉把手机放远一点,有电磁辐射,我把睡觉功法交给你,这样就可以睡好了。

es6 Class基本语法和继承

es6 Class基本语法 class的基本语法: ES6 的class只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已 传统用构造函数生成实例 function Point(x, y) {th…

政安晨:【Keras机器学习实践要点】(七)—— 使用TensorFlow自定义fit()

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 在TensorFlow中,fit()是一个非常…

【算法题】三道题理解算法思想--滑动窗口篇

滑动窗口 本篇文章中会带大家从零基础到学会利用滑动窗口的思想解决算法题,我从力扣上筛选了三道题,难度由浅到深,会附上题目链接以及算法原理和解题代码,希望大家能坚持看完,绝对能有收获,大家有更好的思…

Jackson 2.x 系列【6】注解大全篇二

有道无术,术尚可求,有术无道,止于术。 本系列Jackson 版本 2.17.0 源码地址:https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 注解大全2.11 JsonValue2.12 JsonKey2.13 JsonAnySetter2.14 JsonAnyGetter2.15 …