xml 文件中的 xmlns、xsi、xsd

  • xmlns
  • xsi
  • xsd

下面是 spring.xml 中的一段:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
  • xmlns:xml namespace,xml 命名空间
  • xsi:xml schema instance,xml 模式实例
  • xsd:xml schema definition,xml 模式定义

一个 xml 文件里至少包含 xmlns、xmlns:xsi 和 xsi:schemaLocation,如 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

xmlns

xml namespace,xml 命名空间

对比上面的 spring.xml 和 pom.xml,我们就可以知道

  1. xmlns= 后面配置的是当前 xml 的骨架标签
    如 spring.xml 里的 < beans > 和 < bean > 等。
    如 pom.xml 里的 < project > 和 < dependence > 等。
  2. xmlns: 后面配置的是我们能够使用的除了骨架标签以外的其它标签
    如 xsi,这是最特殊的一个,下面具体讲。
    如 context,它使你可以配置 <context:component-scan base-package=“com.xxx”>

xmlns:context="http://www.springframework.org/schema/context" 来举例子,它其实对应的是这个文件

里的这个处理类

这个处理类是这样的

它的初始化其实是把,< context > 标签后面 : 接的元素名 与对应的解析器放到了一个名叫 parsers 的 HashMap 里:


BeanDefinitionParser 的作用,就是把一个一个配置转换成 BeanDefinition。
BeanDefinition 就是一个关于 Bean 的信息的类,它包含了这个 Bean 实例化中需要的各种属性,是十分重要的一个类。

而 context:component-scan,注定了

<context:component-scan base-package="com.xx"></context:component-scan>

这个名叫 context 的 bean 会用于扫描 @Component。

xsi

xml schema instance,xml 模式实例

为什么叫模式实例,因为标签的解析方式并不是只有一种,你自己也可以定义 < beans >标签的含义,所以我们需要确定我们用的是那种实例。

xmlns:xsi= 后面配置的基本都一样,都是 “http://www.w3.org/2001/XMLSchema-instance”,因为我们配置xmlns:xsi,都是为了能够使用 xsi:schemaLocation。

而使用 xsi:schemaLocation 是为了能够配置所有的 xmlns 后面的 URI 与实际的 xsd 文件的对应关系(所以它们成对出现)。
当然这包括 xmlns= 后面的 URI。
当然这包括 xmlns:xsi 后面的 URI,因为人无法通过抓自己头发的方式把自己提起来(人只能提起其它东西)。

那么,什么是 xsd 文件呢?

xsd

xml schema definition,xml 模式定义

定义,就是定义这个标签该怎么用,不能有其它作用。

它其实在这里对应它的实际文件:


打开 org/springframework/context/config/spring-context.xsd,里面其实定义的是标签的规范,如

这有配置了这些,你才能使用 component-scan。

希望这些对你有所帮助!

从源码角度解读 xml 文件中的 xmlns、xsi、xsd相关推荐

  1. spring 源码分析(1)-xml文件解析

    我们在最开始接触spring的时候,看到不少书spring入门的例子如下 ApplicationContext atx = new ClassPathXmlApplicationContext(&qu ...

  2. Tomcat7.0源码分析——server.xml文件的加载与解析

    前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析进行分析. 加载过程分析 Bootst ...

  3. 从源码角度解析线程池中顶层接口和抽象类

    摘要:我们就来看看线程池中那些非常重要的接口和抽象类,深度分析下线程池中是如何将抽象这一思想运用的淋漓尽致的. 本文分享自华为云社区<[高并发]深度解析线程池中那些重要的顶层接口和抽象类> ...

  4. springSecurity源码分析-spring-security.xml文件配置

    在spring-security.xml文件中配置 在配置文件中我们主要使用标签来过多成配置 <!-- 配置不拦截的资源 --> <security:http pattern=&qu ...

  5. 详解 xml 文件头部的 xmlns:xsi

    xmlns:(XML Namespaces的缩写)是一个属性,是XML(标准通用标记语言的子集)命名空间的声明.作用是赋予命名空间一个唯一的名称. 命名空间是什么呢? 由于xml允许你自己定义自己的标 ...

  6. Tomcat源码分析——server.xml文件的加载

    前言 作为Java程序员,对于tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载的进行分析. 源码分析 Bootstrap的 ...

  7. C#语言实例源码系列-实现XML文件操作

    专栏分享 点击跳转=>Unity3D特效百例 点击跳转=>案例项目实战源码 点击跳转=>游戏脚本-辅助自动化 点击跳转=>Android控件全解手册

  8. windows 批处理把所有java源码导入一个txt文件中

    首先在src下搜*.java,把搜到的文件全拷出来放在allsrc目录下, 然后在allsrc目录下建个run.bat,键入以下内容for %%i in (*.java)  do type %%i&g ...

  9. 对应到对象 数据库驼峰_从源码角度理解Mybatis字段映射(一) - 驼峰式命名

    凯伦说,公众号ID: KailunTalk,努力写出最优质的技术文章,欢迎关注探讨. 在上篇博客-[JDBC] 处理ResultSet,构建Java对象中提到,我们需要分析Mybatis在转换Resu ...

最新文章

  1. torch 常用函数
  2. matlab usewhitebg,我有一个matlab的程序运行出错,各位大神求救,很急啊
  3. PHP的display_errors与error_reporting
  4. 【代码笔记】iOS-实现网络图片的异步加载和缓存
  5. Silverlight C# 游戏开发:关于精灵for Silverlight容器
  6. 计算机水平考试模拟,计算机水平考试模拟试题(doc 23页)
  7. fir数字滤波器设计与软件实现_基于FPGA低通滤波器的FIR的设计
  8. 为什么给他们讲WP的技术秘密
  9. 【3dmax千千问】食住玩初学3dmax插件神器第24课:3dmax自学渲染效果图教程|疯狂模渲大师、室内设计师、效果图绘图员都应该如何认识VRAY或扫描线CORONA渲染器及其VR核心算法的作用?
  10. 配置switchOmegaProxy插件
  11. 全网最火! 阿里 P6 级,廖雪峰的「全栈架构师」开讲了
  12. 连续十日票房日冠,《人生大事》带热了电影大盘!它凭何突出重围?
  13. firefox 返回 16 进制 颜色值
  14. Python3 初学实践案例(10)对象转字典 object to dict
  15. Docker镜像的三大构建方式
  16. 【零基础】MT4量化入门一:跑一个简单的boll
  17. JAVA应用程序转换为Applet
  18. 计算机毕业设计 汉语多音字注音研究
  19. Visual Studio 2013 配置Boost库。 如何编译和选择,遇到无法打开文件“libboost_thread-vc120-mt-gd-1_58.lib的解决办法
  20. CSS 动画 多帧 animation 旋转

热门文章

  1. 帧中继(FR) CISCO之CCNA篇之十
  2. matlab伯德图稳定性,11系统的稳定性Bode稳定判据介绍.ppt
  3. (iaas)脚本搭建先电云计算基础架构平台
  4. UGC之殇:如何确保内容安全
  5. 美的集团计算机综合面试群面,世界500强美的集团群面经验分享
  6. 带你学系列之Ruby 环境介绍
  7. 劳动如今还是最光荣的吗?
  8. TI ADI DSP 与 ARM Cortex-A 的 FIR FFT 性能对比
  9. 为什么IT管理员需要一个自动补丁管理软件?
  10. 双向Dijkstra算法、Dijkstra算法对比