在分析spring和dubbo服务端相关联的时候分析到dubbo里面的ServiceBean这个对象是如何被spring创造出来的?通过我的多方查找最后发现ServiceBean的来源是xml解析的过程中获得的。在dubbo配置文件的命名空间声明时有这么一段
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
上面的dubbo.xsd就是我们这里要学习的XML Schema,今天我们只针对dubbo.xsd文件分析XML Schema具体细节大家可以自行参考XML Schema 教程首先可以看一下所有的元素都被包含在<xsd:schema>
标签里面,然后是xmlns:xsd="http://www.w3.org/2001/XMLSchema"
这句的意思是使用w3里面的XMLSchema标签,并且使用命名空间为xsd
也就是如果需要使用XMLSchema里面的标签需要加上xsd例如:
<xsd:complexType name="abstractServiceType">
<xsd:complexContent>
<xsd:extension base="abstractInterfaceType">
<xsd:attribute name="register" type="xsd:string">
<xsd:annotation>
<xsd:documentation><![CDATA[ The service can be register to registry. ]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
在dubbo.xsd文件中使用XML Schema命名空间的标签最常用的是:
- xsd:complexType:表示自定义了一个复合类型,这个复合类型可以被其他的attribute使用
- xsd:complexContent:表示定义的复合类型里面的内容是什么
- xsd:attribute:定义一个属性,这个属性有name和type。其中type可以是XMLSchema里面的基本类型(String,int)也可以是我们自定义的复合类型。
- xsd:element 定义一个元素,一般包含name和type,name表示在使用当前dubbo.xsd的xml文件里面使用的标签名称。例如
<!-- 在dubbo消费端暴露的服务 -->
<dubbo:service interface="com.order.OrderService" ref="orderService" timeout="5000" />
<!-- 在dubbo.xsd文件中定义的命名空间 -->
<xsd:element name="service" type="serviceType">
<xsd:annotation>
<xsd:documentation><![CDATA[ Export service config ]]></xsd:documentation>
<xsd:appinfo>
<tool:annotation>
<tool:exports type="org.apache.dubbo.config.ServiceConfig"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
定义的复合类型的作用是什么了?
- 规范了我们使用标签的名字和里面的各种属性
- 可以通过spring来帮我们扩展namespace
网友评论