dubbo扩展了spring自定义标签,所有的
首先在在/dubbo-config-spring/src/main/resources/META-INF/路径下有三个配置文件,分别是,spring.shemas,dubbo.xsd,spring.handlers,这三个配置文件的作用分别是
dubbo.xsd是spring自定义标签的xsd文件,这个文件的作用是定义了自定义标签的格式,对xsd文件不太熟悉的同学可以自行搜索相关信息。而spring.shemas
http://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd
的作用是为了方便spring找到dubbo.xsd,因为约束文件默认是到网络上搜索的,有了这个配置文件就可以将网络搜索重定向到本地,这个重定向工作是是由spring自动完成的,而spring.handlershttp://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler
则是制定标签到spring实例的解析过程,代码都写在这个扩展handlers里面。
其中DubboNamespaceHandler是继承自
org.springframework.beans.factory.xml.NamespaceHandlerSupport
该类spring为了让用户扩展spring命名空间提供的类,而dubbo扩展的命名空间是 http://code.alibabatech.com/schema/dubbo,所以,如果想在spring的配置文件里面使用诸如 <dubbo:service>,<dubbo:reference>等以
这个命名空间下面扩展了9个自定义标签,他们分别是<dubbo:service>,<dubbo:application><dubbo:referece><dubbo:module><dubbo:cusumer><dubbo:provider><dubbo:rigster><dubbo:protocol><dubbo:monitor>
这9个自定义标签都有各自的属性和子标签,所以必须要有各自的解析策略,spring要求对自定义标签的解析,要实现BeanDefinitionParser这个类,重写parse方法。写到这,读者可能还有一个疑问,那就是spring怎么保证用户自定的标签里面的属性是固定的呢?如果用户的自定义标签厘米的属性可以任意变化,那么这解析策略是不是就没有用了,这就要靠xsd文件了,里面是spring与用户之间的约束,约束了自定义标签的属性,属性值的类型等信息,这就是为什么我们在文件头还有加上
http://code.alibabatech.com/schema/dubbo/dubbo.xsd的原因了。所以如果想要将dubbo整合进spring一定要在XML 文件的约束加上http://code.alibabatech.com/schema/dubbo和http://code.alibabatech.com/schema/dubbo/dubbo.xsd,以下是一个例子,读者可以进行参考
<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"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">