1. 概述
在 dubbo 提供的几种方式中,XML 配置肯定是大家最熟悉的方式。
如果胖友不熟悉,可以查看如下文档:
XML 配置,自定义 <dubbo: />
标签,基于 Spring XML 进行解析。如果不了解的胖友,可以查看如下文档:
2. 定义
2.1 sprng.schemas
dubbo 在 dubbo-spring-config
的 META-INF/spring.schemas
定义如下:
http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=meta-inf/dubbo.xsd |
2.2 dubbo.xsd
dubbo.xsd
定义如下:
<xsd:element name="" />
,定义了元素的名称。例如,<xsd:element name="application" />
对应<dubbo:application />
。<xsd:element type="" />
,定义了内建数据类型的名称。例如,<xsd:element type="applicationType" />
对应<xsd:complexType name="applicationType" />
。<xsd:complexType name="">
,定义了复杂类型。例如<xsd:complexType name="applicationType" />
如下:
2.3 spring.handlers
spring.handlers
定义如下:
http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.dubboNamespaceHandler |
2.4 dubboNamespaceHandler
com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler
,实现 org.springframework.beans.factory.xml.NamespaceHandlerSupport
抽象类,dubbo 的 XML Namespace 的处理器。
在 #init()
方法,定义了每个 <xsd:element />
对应的 org.springframework.beans.factory.xml.BeanDeFinitionParser
,代码如下:
@Override public void init() { registerBeanDeFinitionParser("application", new dubboBeanDeFinitionParser(ApplicationConfig.class, true)); registerBeanDeFinitionParser("module", new dubboBeanDeFinitionParser(ModuleConfig.class, true)); registerBeanDeFinitionParser("registry", new dubboBeanDeFinitionParser(RegistryConfig.class, true)); registerBeanDeFinitionParser("monitor", new dubboBeanDeFinitionParser(MonitorConfig.class, true)); registerBeanDeFinitionParser("provider", new dubboBeanDeFinitionParser(ProviderConfig.class, true)); registerBeanDeFinitionParser("consumer", new dubboBeanDeFinitionParser(ConsumerConfig.class, true)); registerBeanDeFinitionParser("protocol", new dubboBeanDeFinitionParser(ProtocolConfig.class, true)); registerBeanDeFinitionParser("service", new dubboBeanDeFinitionParser(ServiceBean.class, true)); registerBeanDeFinitionParser("reference", new dubboBeanDeFinitionParser(ReferenceBean.class, false)); registerBeanDeFinitionParser("annotation", new AnnotationBeanDeFinitionParser()); // 废弃 } |