[spring]XML配置文件标签

    spring的XML配置文件的标签大体可以分为两种:

    其中的默认标签,我们前面文章里面出现的标签都是默认标签,是spring本身自带的,不需要我们去引入其他东西。而自定义标签则是指非默认标签的其他的由我们或产品发行方自定义的对接spirng的XML标签。 这里其实就关系到spring整合其他框架了。

    默认标签与自定义标签最大的区别就是,自定义标签需要我们自己引入其它命名空间约束的标签(通过前缀方式引入)。这里我们先来讲一下Bean的XML配置文件的标头。

命名空间、xsd介绍

    提到配置文件里面的标签,就离不开要谈到xsd和DTD,他们都可以用来描述xml文档的结构,以前一些老的代码里面可能还会看到DTD,但是随着xsd支持数据类型,所以现在看到的基本都是xsd了。

    XML Schema 语言是用来定义xml结构的。简称xsd(XML Schema Definition)

    如下图,这是一个默认的spring Bean的XML配置文件的标头:

xmlns:意为XML 命名空间,用于定义一套xml标签的规范。这个属性用于定义这个 XML 文档的默认命名空间,在这个示例中告诉解析器这个 XML 文件中的元素(如<bean>)是http://www.springframework.org/schema/beans这个命名空间下定义的。

xmlns:xsi:用于引入XML 模式实例命名空间(也就是XML Schema Instance)。这个命名空间提供了一些用于验证 XML 文档结构的属性。

xsi:;schemaLocation:指定 XML 文档所遵循的 XML Schema 的位置。这个属性通常会有一对的值,用来指定xmlns属性定义的文件的位置。看着像一个网址,实际可能映射的是本地的某个jar包里面的xsd文件。而且写法上,先写命名空间,再写xsd地址。

    

总结一下引入schema文件的具体步骤:

1、查看schema文档,找到根元素,在xml中写出来

2、根元素来自哪个命名空间。使用xmlns指令来声明(命名空间的作用:它指的是一个环境,所用的标签来自于哪个环境定义的)

3、声明引入的名称空间跟哪个xsd文件对应

4、声明schemaLocation哪里来的,一般都是某个标准(写法上都是先写命名空间+具体文件的位置,成对)

    除此之外,在spring里面还有7大模块,每个模块也有它们自己的对应标签。

     例如context组件,在使用注解和配置类来平替bean.xml配置文件的时候,我们就需要使用到context文件的标签。详细的可以去看我的另一篇文章:

<beans>标签配置多环境

    在实际开发中,我们往往会有很多环境。比如编写代码一个环境,测试一个环境,运维又是一个环境,每个环境可能都会有自己特定的某个东西。为了便于这些环境分开,在spring的XML配置环境里面,我们可以使用<beans>来给特定的环境配置其所需要的环境。

    这里边示范边讲解,我们编写配置文件:

    其中,在配置文件的根标签下可以继续使用<beans>,并不是说<beans>只作为根标签。在用来配置环境的Bean的<beans>标签,还需要通过属性profile来给这个<beans>的内容启用的环境命名。 相关的User类和AServer类大家自己定义即可,里面没什么东西。

    然后是测试类运行:

    其中,使用System.setProperty();来启用我们的spring配置文件的相关环境,而且我们的代码运行中,多次启用了不同的环境,那么只会生效我们最新启用的那个环境

    这里两个环境都有aServer,但是text环境中的aServer里面给属性name赋值为李四,dev赋值为张三。

    另外还需要注意,我们更改环境后,我们的容器还要重新加载一下进行更新,因为这个容器是根据调用对象的环境,返回对应的Bean配置,而其他不符合环境的Bean配置不会给到调用对象。

    我们看断点的变量池,这是第一个断点处的内容,也就是开发环境下的Bean对象:

    这是第二断点处的内容:

   

     当然,把多个环境的配置全部写在一个配置文件里面,会显得很乱,所以多环境还常搭配<import>标签使用。

<import>引入其他资源配置文件

    我们编写两个bean的配置文件:

    其中,我们的bean1文件中没有配置user,但是我们在bean2文件中配置了user,我们在bean1引入bean2,我们就可以得到bean2里面的配置了。

    测试类:

     运行结果:

     前面我们讲到了多环境常搭配<import>,也就是在这里。我们在主配置文件里面,不再直接在配置多环境的<beans>标签下编写内容,而是把内容编写到另一个单独的配置文件里面,然后在主配置文件下面的多环境使用<import>导入它。

引入自定义标签

    这个自定义,不只是在说我们自己个人定义的。实际应用中,是指spring整合其他框架时,其他框架有提供自己相关XML配置的标签,我们可以将其引入来使用。

    在我的另一篇文章里讲到了springContext标签的引入,但是那是spring自己的模块,如果我们要引入其他框架,就不像那里面演示的改几个单词就可以了。

    在这里我以导入dubbo为例,分享一下我的个人经验:

    首先,我们要导入dubbo的jar包,然后在我们的Bean配置文件的表头中引入相关标签。

    引入相关标签的操作和spring一样,关键在于导入dubbo的schema。但是我们要怎么写呢?任何官方通常都会给出相关说明文档,所以我们去到dubbo的官网查找。

    进入到官网之后,我们直接ctrl+F,打开页面关键词搜索,输入 "Schema":

    搜索出结果,上来就是我们要找的导入过程。 

    这里注意我们要添加的只有 xmlns:dubbo一行,以及xsi:schemaLocation中关于dubbo的xsd的成对映射。

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

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

相关文章

简单的bytebuddy学习笔记

简单的bytebuddy学习笔记 此笔记对应b站bytebuddy学习视频进行整理&#xff0c;此为视频地址&#xff0c;此处为具体的练习代码地址 一、简介 ByteBuddy是基于ASM (ow2.io)实现的字节码操作类库。比起ASM&#xff0c;ByteBuddy的API更加简单易用。开发者无需了解class file …

【信息系统项目管理师】高分论文:论信息系统项目的进度管理(人力资源管理系统)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划进度管理3、排列活动顺序4、估算活动持续时间5、制订进度计划6、控制进度论文 2022年2月,我作为项目经理参与了XX电网公司人力资源管理系统建设项目,该项目是2022年XX电网公司“十三五”信息化规…

vue3项目结合Echarts实现甘特图(可拖拽、选中等操作)

效果图&#xff1a; 图一&#xff1a;选中操作 图二&#xff1a;上下左右拖拽操作 本案例在echarts​​​​​​​示例机场航班甘特图的基础上修改​​​​​​​ 封装ganttEcharts组件&#xff0c;测试数据 airport-schedule.jsonganttEcharts代码: 直接复制粘贴可测​​​​…

GIT安装过程

文章目录 ‌下载安装包‌安装过程‌验证安装‌Git的基本使用‌ ‌Git的安装可以通过以下步骤完成‌ ‌下载安装包‌ 首先&#xff0c;访问Git官网(https://git-scm.com/)或Git for Windows(https://gitforwindows.org/)下载对应系统的安装包。 对于Windows系统&#xff0c;通常…

Java 技术面试常见问题解析

1.说说Mybatis的缓存机制: MyBatis 是一个优秀的持久层框架&#xff0c;它简化了企业应用开发中数据库操作的代码。MyBatis 提供了一级缓存和二级缓存机制来优化对数据库的访问。 一级缓存 (SqlSession级别的缓存) 一级缓存是 MyBatis 中默认开启且无法关闭的缓存机制。它存…

Word使用分隔符实现页面部分分栏

文章目录 Word使用分隔符实现页面部分分栏分隔符使用页面设置 Word使用分隔符实现页面部分分栏 分隔符使用 word中的分隔符&#xff1a; 前面不分栏&#xff0c;后面分栏(或前面分栏&#xff0c;后面不分栏)&#xff0c;只需要在分隔位置处插入分隔符&#xff1a;“连续”即…

掌握 Spring Boot 中的 WebClient:何时以及为何使用它而不是 RestTemplate

在开发 Spring Boot 应用程序时&#xff0c;与 RESTful Web 服务进行通信是一项常见需求。从历史上看&#xff0c;开发人员已将RestTemplate用于此目的。然而&#xff0c;随着反应式编程的出现和对更高效资源利用的需求&#xff0c;WebClient已成为首选。本文探讨了RestTemplat…

主曲率为常数时曲面分类

主曲率为常数 ⇔ K , H \Leftrightarrow K,H ⇔K,H 为常数&#xff0c;曲面分类&#xff1a; 1.若 k 1 k 2 0 k_1k_20 k1​k2​0,则 S S S为全脐点曲面——平面的一部分&#xff1b; 2.若 k 1 k 2 ≠ 0 k_1k_2\neq0 k1​k2​0,则 S S S为全脐点曲面——球面的一部分&…

asp.net core发布配置端口号,支持linux

方式一&#xff0c;修改配置文件 appsettings.json 找到文件 appsettings.json&#xff0c; 添加如下节点配置&#xff0c;在linux环境需要设置0.0.0.0才可以正常代表本机&#xff0c;然后被其他机器访问&#xff0c;此处设置端口8000&#xff0c; "Kestrel": {&quo…

【安当产品应用案例100集】033-安当TDE透明加密在移动存储加密中的应用案例

背景介绍 随着移动互联网的普及&#xff0c;企业和个人越来越依赖移动存储设备&#xff0c;如U盘、移动硬盘以及云存储服务进行数据的存储和传输。然而&#xff0c;这种便捷性也带来了数据安全的隐患。如何确保存储在移动设备上的数据不被非法访问和泄露&#xff0c;成为企业和…

【linux 内存】cat /proc/meminfo、free

cat /proc/meminfo 各字段详解 /proc/meminfo是了解Linux系统内存使用状况的主要接口&#xff0c;我们最常用的”free”、”vmstat”等命令就是通过它获取数据的 &#xff0c;/proc/meminfo所包含的信息比”free”等命令要丰富得多&#xff0c;因此需要了解这些字段的含义。 …

Android HandlerThread、Looper、MessageQueue 源码分析

Android HandlerThread、Looper、MessageQueue 源码分析 简介 在 Android 开发中&#xff0c;大家应该对 HandlerThread 有一定了解。顾名思义&#xff0c;HandlerThread 是 Thread 的一个子类。与普通的 Thread 不同&#xff0c;Thread 通常一次只能执行一个后台任务&#x…

配置PostgreSQL用于集成测试的步骤

在进行软件开发时&#xff0c;集成测试是确保各个组件能够协同工作的关键环节。PostgreSQL作为一种强大的开源数据库系统&#xff0c;常被用于集成测试中。下面将详细介绍如何在不同的环境中配置PostgreSQL以支持集成测试。 1. 选择并安装PostgreSQL 首先&#xff0c;你需要根…

WebRTC搭建与应用(一)-ICE服务搭建

WebRTC搭建与应用(一) 近期由于项目需要在研究前端WebGL渲染转为云渲染&#xff0c;借此机会对WebRTC、ICE信令协议等有了初步了解&#xff0c;在此记录一下&#xff0c;以防遗忘。 第一章 ICE服务搭建 文章目录 WebRTC搭建与应用(一)前言一、ICE是什么&#xff1f;二、什么…

【学习笔记】深入浅出详解Pytorch中的View, reshape, unfold,flatten等方法。

文章目录 一、写在前面二、Reshape&#xff08;一&#xff09;用法&#xff08;二&#xff09;代码展示 三、Unfold&#xff08;一&#xff09;torch.unfold 的基本概念&#xff08;二&#xff09;torch.unfold 的工作原理&#xff08;三&#xff09; 示例代码&#xff08;四&a…

深入理解 MySQL 索引

引言 在数据库管理中&#xff0c;索引&#xff08;Index&#xff09;是提高查询性能的关键技术之一。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;广泛应用于各种规模的应用程序中。本文将深入探讨 MySQL 中的索引概念、类型、工作原理以及最佳实践&#xff0c;帮助…

利用notepad++删除特定关键字所在的行

1、按组合键Ctrl H&#xff0c;查找模式选择 ‘正则表达式’&#xff0c;不选 ‘.匹配新行’ 2、查找目标输入 &#xff1a; ^.*关键字.*\r\n (不保留空行) ^.*关键字.*$ (保留空行)3、替换为&#xff1a;&#xff08;空&#xff09; 配置界面参考下图&#xff1a; ​​…

docker安装和换源

安装&#xff1a; https://www.runoob.com/docker/ubuntu-docker-install.html sudo apt-get remove docker docker-engine docker.io containerd runcsudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-commoncurl -fsS…

CSSmodule的作用是什么

CSS Modules的作用主要体现在以下几个方面&#xff1a; 1. 解决全局样式污染问题 在传统的CSS管理方式中&#xff0c;样式定义通常是全局的&#xff0c;这很容易导致全局样式污染。当多个组件或页面共享同一个样式时&#xff0c;可能会出现样式冲突和覆盖的情况&#xff0c;从…

创建第一个QML项目

文章目录 使用 Qt Creator 创建 Qt Quick 项目详解为什么选择 Qt Creator&#xff1f;1. 打开 Qt Creator2. 选择项目模板3. 设置项目名称与路径4. 定义项目细节5. 配置构建套件6. 检查项目配置7. 编译并运行项目后续操作修改界面添加功能 总结 使用 Qt Creator 创建 Qt Quick …