6.2 dubbo在spring中自定义xml标签源码解析
2017-10-02 13:27
645 查看
在6.1 如何在spring中自定义xml标签中我们看到了在spring中自定义xml标签的方式。dubbo也是这样来实现的。

一 META_INF/dubbo.xsd
比较长,只列出<dubbo:applicaton>元素相关的。
与上一节完全相似。
二 META_INF/spring.schemas
与上一节完全相似。
三 DubboBeanDefinitionParser
代码较长,不再贴出来了,与上一节完全相似。
四 DubboNamespaceHandler
功能与上一节完全相似。这里可以看出,dubbo自定义了10个xml元素(也可以从xsd中看出)。从上边也可以看出,<dubbo:service>会被解析成ServiceBean,该bean极其重要。
五 META_INF/spring.handlers
与上一节完全相似。

一 META_INF/dubbo.xsd
比较长,只列出<dubbo:applicaton>元素相关的。
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 3 xmlns:beans="http://www.springframework.org/schema/beans" 4 xmlns:tool="http://www.springframework.org/schema/tool" 5 xmlns="http://code.alibabatech.com/schema/dubbo" 6 targetNamespace="http://code.alibabatech.com/schema/dubbo"> 7 8 。。。 9 10 <xsd:complexType name="applicationType"> 11 <xsd:attribute name="id" type="xsd:ID"> 12 <xsd:annotation> 13 <xsd:documentation><![CDATA[ The unique identifier for a bean. ]]></xsd:documentation> 14 </xsd:annotation> 15 </xsd:attribute> 16 <xsd:attribute name="name" type="xsd:string" use="required"> 17 <xsd:annotation> 18 <xsd:documentation><![CDATA[ The application name. ]]></xsd:documentation> 19 </xsd:annotation> 20 </xsd:attribute> 21 <xsd:attribute name="version" type="xsd:string"> 22 <xsd:annotation> 23 <xsd:documentation><![CDATA[ The application version. ]]></xsd:documentation> 24 </xsd:annotation> 25 </xsd:attribute> 26 <xsd:attribute name="owner" type="xsd:string"> 27 <xsd:annotation> 28 <xsd:documentation><![CDATA[ The application owner name (email prefix). ]]></xsd:documentation> 29 </xsd:annotation> 30 </xsd:attribute> 31 <xsd:attribute name="organization" type="xsd:string"> 32 <xsd:annotation> 33 <xsd:documentation><![CDATA[ The organization name. ]]></xsd:documentation> 34 </xsd:annotation> 35 </xsd:attribute> 36 <xsd:attribute name="architecture" type="xsd:string"> 37 <xsd:annotation> 38 <xsd:documentation><![CDATA[ The architecture. ]]></xsd:documentation> 39 </xsd:annotation> 40 </xsd:attribute> 41 <xsd:attribute name="environment" type="xsd:string"> 42 <xsd:annotation> 43 <xsd:documentation><![CDATA[ The application environment, eg: dev/test/run ]]></xsd:documentation> 44 </xsd:annotation> 45 </xsd:attribute> 46 <xsd:attribute name="compiler" type="xsd:string"> 47 <xsd:annotation> 48 <xsd:documentation><![CDATA[ The java code compiler. ]]></xsd:documentation> 49 </xsd:annotation> 50 </xsd:attribute> 51 <xsd:attribute name="logger" type="xsd:string"> 52 <xsd:annotation> 53 <xsd:documentation><![CDATA[ The application logger. ]]></xsd:documentation> 54 </xsd:annotation> 55 </xsd:attribute> 56 <xsd:attribute name="registry" type="xsd:string" use="optional"> 57 <xsd:annotation> 58 <xsd:documentation><![CDATA[ The application registry. ]]></xsd:documentation> 59 </xsd:annotation> 60 </xsd:attribute> 61 <xsd:attribute name="monitor" type="xsd:string" use="optional"> 62 <xsd:annotation> 63 <xsd:documentation><![CDATA[ The application monitor. ]]></xsd:documentation> 64 </xsd:annotation> 65 </xsd:attribute> 66 <xsd:attribute name="default" type="xsd:string" use="optional"> 67 <xsd:annotation> 68 <xsd:documentation><![CDATA[ Is default. ]]></xsd:documentation> 69 </xsd:annotation> 70 </xsd:attribute> 71 </xsd:complexType> 72 73 。。。 74 75 <xsd:element name="application" type="applicationType"> 76 <xsd:annotation> 77 <xsd:documentation><![CDATA[ The application config ]]></xsd:documentation> 78 </xsd:annotation> 79 </xsd:element> 80 81 。。。 82 83 </xsd:schema>
与上一节完全相似。
二 META_INF/spring.schemas
1 http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd
与上一节完全相似。
三 DubboBeanDefinitionParser
代码较长,不再贴出来了,与上一节完全相似。
四 DubboNamespaceHandler
1 package com.alibaba.dubbo.config.spring.schema; 2 3 import com.alibaba.dubbo.common.Version; 4 import com.alibaba.dubbo.config.ApplicationConfig; 5 import com.alibaba.dubbo.config.ConsumerConfig; 6 import com.alibaba.dubbo.config.ModuleConfig; 7 import com.alibaba.dubbo.config.MonitorConfig; 8 import com.alibaba.dubbo.config.ProtocolConfig; 9 import com.alibaba.dubbo.config.ProviderConfig; 10 import com.alibaba.dubbo.config.RegistryConfig; 11 import com.alibaba.dubbo.config.spring.AnnotationBean; 12 import com.alibaba.dubbo.config.spring.ReferenceBean; 13 import com.alibaba.dubbo.config.spring.ServiceBean; 14 15 import org.springframework.beans.factory.xml.NamespaceHandlerSupport; 16 17 public class DubboNamespaceHandler extends NamespaceHandlerSupport { 18 19 static { 20 Version.checkDuplicate(DubboNamespaceHandler.class); 21 } 22 23 public void init() { 24 registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true)); 25 registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true)); 26 registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true)); 27 registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true)); 28 registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true)); 29 registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true)); 30 registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true)); 31 registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true)); 32 registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false)); 33 registerBeanDefinitionParser("annotation", new DubboBeanDefinitionParser(AnnotationBean.class, true)); 34 } 35 }
功能与上一节完全相似。这里可以看出,dubbo自定义了10个xml元素(也可以从xsd中看出)。从上边也可以看出,<dubbo:service>会被解析成ServiceBean,该bean极其重要。
五 META_INF/spring.handlers
1 http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler
与上一节完全相似。
相关文章推荐
- dubbo源码—dubbo自定义spring xml标签
- spring 源码探索--xml的自定义标签解析
- dubbo源码—dubbo自定义spring xml标签
- dubbo源码:配置文件加载自定义标签解析
- Dubbo源码-Dubbo是如何随心所欲自定义XML标签的
- Dubbo源码分析(三):自定义Schema--基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)
- RPC框架(五)dubbo源码分析--Spring解析dubbo标签
- Spring源码阅读-- 解析自定义命名空间的标签
- spring源码学习之:xml配置文件标签自定义
- spring源码-2-xml标签的解析
- spring源码(9)自定义标签与自定义标签的解析
- spring源码学习之:xml配置文件标签自定义
- spring源码学习之:xml配置文件标签自定义
- Spring源码解密之自定义标签与解析
- 【spring源码学习】spring的IOC容器之自定义xml配置标签扩展namspaceHandler向IOC容器中注册bean
- 学习dubbo第一步,了解spring框架的XML扩展特性:让spring加载和解析你自定义的XML文件
- Spring源码解析-自定义标签解析
- Spring源码解析之自定义标签的解析
- Spring源码解析:自定义标签的解析过程
- Spring源码解析-自定义标签解析