spring怎么读多个文件Spring的xml⽂件详解
spring的xml配置⽂件头:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:context="/schema/context"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-3.0.xsd
/schema/context
/schema/context/spring-context-3.0.xsd">
...<!--中间xml⽂件部分-->.....
</beans>
⼀直在复制黏贴,但是不知道作⽤是什么,不理解的话常出错。。。
xmlns和命名空间
⾸先,介绍⼀下xmlns的作⽤,如下所⽰,⼀个 xml ⽂档中如果包含如下两种定义不同,但是名称相同的元素, xml 解析器是⽆法解析的,因为它不能确定当你调⽤ElementsByTagName("book") 时应该返回哪个元素。
<!-- 这⾥的 table 元素描述的是⼀个表格-->
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
<!-- 这⾥的 table 元素描述的是⼀个家居桌⼦-->
<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
这时候可以通过在名称增加前缀解决这个问题
<!-- 这⾥的 table 元素描述的是⼀个表格-->
<h:table> <!--添加了前缀 h -->
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<!-- 这⾥的 table 元素描述的是⼀个表格-->
<f:table> <!--添加了前缀 f -->
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
由此,引⼊⼀个概念命名空间,通过增加前缀表⽰不同的那是不同命名空间下的table,从⽽解决了⽭盾,
但是不同的⼈都有⾃⼰创建的不同的命名空间来描述同样的东西,不利于xml⽂件信息的解析,⽐如说,同样都是⽔果,可以从颜⾊和⾹味不同⾓度来定义成如下两种形式:
<!--按照⽔果⾹味来定义-->
<perfume:fruit>
<name>....</name>
<perfume>.....</perfume>
</perfume:fruit>
<!--按照⽔果颜⾊来定义-->
<color:fruit>
<name>....</name>
<color>....</color>
</color:fruit>
为此,w3c(万维⽹联盟)对于⼀些类型,定义了对应的命名空间和这些类型的标准,xml解释器碰到这些类型的时候就会通过这些标准去解析这类型的标签,为了确保命名空间的唯⼀,所以不同的命名空间的通常使⽤URL作为被识别的id,如下例⼦:
xmlns:xsi="/2001/XMLSchema-instance"
这句话的作⽤是当前引⼊了⼀个叫做xsi的命名空间,xsi可以在接下来要使⽤该命名空间时所使⽤的,如下:
<xsi:schemaLocation="...... ......">
⽽这个很长的字符串,则是xsi这个名称空间被xml解释器内部所识别的时候所真正使⽤的id,但也本⾝只是被当做⼀个字符串名字去处
理,xml解释器根据这个id去获取它对应的标准,从⽽知道这个命名空间定义有什么样的标签(xml解释器⾃带有⼀些通⽤的命名空间的标准),这个字符串虽然看起来是URL,但是和对应的⽹页上的信息没有关系,只是⽤来提供命名空间唯⼀性的作⽤,⽹址有时可以被打开,上⾯会有关于该命名空间的信息。
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:context="/schema/context"
所以,spring配置⽂件中这三句话分别表⽰,引⼊了三个命名空间。
其中第⼀个xmlns后⾯没有空间名的,表⽰引⼊了⼀个默认的名称空间,下⽂中不使⽤命名空间前缀的都默认使⽤这个命名空间,这个默认的命名空间,其真正的id是""。
引⼊的第⼆个命名空间叫做xsi,其真正的id是""
引⼊的第三个命名空间叫做context,其真正的id是""
xsi:schemaLocation
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-3.0.xsd
/schema/context
/schema/context/spring-context-3.0.xsd"
在最后可以看到xsi:schemaLocation,这句话的意思表⽰使⽤命名空间xsi下的schemaLocatioin,设置了它对应的值为后⾯很多很多的URL,schemaLocation中存储的值每两个为⼀组,第⼀个代表命名空间,第⼆个代表该命名空间的标准的⽂件位置,如下所⽰,这句话就是说明命名空间/schema/beans的标准⽂件是/schema/beans/spring-beans-3.0.xsd*
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-3.0.xsd
因为xml解释器不⼀定含有所有命名空间的标准,通过这样设置就可以告诉xml解释器不同命名空间的对应的标准是什么了,⽽这也是xsi这个命名空间的作⽤,要⽤到其schemaLocation。
最后,对应⼀般的xml解释器的⼯作流程中,xml解释器识别到有“"这个通⽤的名称空间后,明⽩知道要引⼊⼀些不同命名空间,就会从其schemaLocation中获取不同命名空间和其对应的标准。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论