以前有对xsd小做研究,有个小困惑,就是我们定义的元素只能使用定义的哪一些标签,比如<beans>下面就只能有自定义的哪一些,那为什么在引入<context>、<aop>等命名空间之后就能使用上诉2个标签呢?之前一直嫌弃spring的xsd太长,第一眼看上去比较混乱,今天鼓起勇气看了一下<beans>的xsd文件,看了之后发现其实还是非常简单的,所使用的无外乎也就是xsd那些东西。
那么,<beans>标签下对元素的定义中有一段是这样子的:
<xsd:sequence> <xsd:element ref="description" minOccurs="0" /> - <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element ref="import" /> <xsd:element ref="alias" /> <xsd:element ref="bean" /> <xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> </xsd:sequence>
倒数第三行:表示<beans>下面可以包含任意标签,来自其他命名空间的。这就解释了上面的问题。
另外:xmlns:p="http://www.springframework.org/schema/p"这个命名空间能够让<bean>的属性<property>标签使用简写,如:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.mook.mybatis.core.mapper" /> </bean>
就可以写成:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="com.mook.mybatis.core.mapper"/>
这种方式,但是一般来说没什么必要,少不了几行,另外简写方式不够灵活。一般来说,知道有这么回事就够了,使用前面的方式就行。
再者:spring的命名空间对xsd的引用不需要加版本号,不加版本号一般来说就是最新的。spring读取校验xsd是先从本地classpath读取,失败才从网络上读取。
时间: 2024-10-03 01:40:19