一、Dubbo服务暴露前奏
读取解析Spring Bean,<dubbo:service ... />
的解析利用的是Spring可扩展的schema机制。
Spring的可扩展schema机制允许用户自定义标签,并配置自定义标签的处理器NamespaceHandler处理标签配置,比如初始化组件等。Spring中与这个机制相关的类是NamespaceHandlerSupport.java
。大家在配置<dubbo:service... />
时需要在配置文件上面的<beans>标签头中引入xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
的标签申明,在dubbo包的META-INF中可以找到一个叫spring.handlers的文件,其中指定了dubbo标签对应的处理器:
http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler
好了,入口已经找到,就是DubboNamespaceHandler了,DubboNamespaceHandler中逻辑很简单,new了好几个DubboBeanDefinitionParser,产生了ServiceBean的BeanDefinition定义。ServiceBean实现了spring的ApplicationListener接口,在该接口的实现方法onApplicationEvent中调用了export()方法。
二、Dubbo服务暴露
ServiceBean#export()
#doExport()
#doExportUrls()
#doExportUrlsFor1Protocol() (如果是多个协议则分别调用)