本地暴露的代码是基于 .2.7.0
前面介绍了dubbo的扩展机制 ,接下来,看下Dubbo是如何加载xml中的bean。
我门可以看到Dubbo的通常是这样子配置的,这个XMl的xsd是dubbo自己定义的。从源码里可以看到有个名字叫dubbo.xsd的文件, ,解析xml的是要在Resources目录下,新建两个文件,名字是spring.schemas和springHandlers, 至于为什么是这两个名字,是Spring的SPI扩展机制规定,相信经过前面的DUbbo的SPI机制的了解,对于这个xml的SPI也会更加清楚,它里面肯定是代码里写死了,加载规定的文件名去扩展。
配置了这个后,Spring会自动配置的Handler类去对应的xml文件,那么接下来可以看出DubboNamespaceHandler类就是解析xml的。
可以看到, dubbo要注册这个多bean的解析类,前面elementName的名字就是对应xml标签的名字. 接下来看下dubbo是如果解析的。
首先,解析类是要继承BeanDefinitionParser类, 这里主要是会调用parse方法去解析xml
Spring中Bean的注册,都是通过BeanDefiniton来注册到一个Map中去。
这个可以看出 <dubbo:service 中ref标签,是往BeanDefinition中去加一个属性的,value值是一个RuntimeBeanReference的对象,里面包装的实现ref的实现类。
总结:
今天主要是对dubbo解析自定义标签的流程,做了一个大致的分析。希望可以坚持写下去。