关于dubbo自定义标签

dubbo扩展了spring自定义标签,所有的配置标签最后都会转化成一个spring-bean,那么dubbo究竟是如何自定义标签的呢?

首先在在/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.handlers

http://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>等以开头标签的时候就必须在文件头加上http://code.alibabatech.com/schema/dubbo,可是这个的作用只是为了告诉spring我已经在你那注册了一个命名空间,以后凡是已这个开头的标签都是dubbo的,此时spring会自动扫描spring.handlers文件找到该命名空间对应的处理类,既然以开头的命名空间都是我dubbo的,那么dubbo就可以自定义标签了,比如上面的<dubbo:service>就是dubbo自定义的标签,dubbo在

这个命名空间下面扩展了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">




你可能感兴趣的:(dubbo学习总结)