在官方《Dubbo 用户指南》架构部分,给出了服务调用的整体架构和流程:
另外,在官方《Dubbo 开发指南》框架设计部分,给出了整体设计:
以及暴露服务时序图:
本文将根据以上几张图,分析服务暴露的实现原理,并进行详细的代码跟踪与解析。
二、原理和源码解析 2.1 标签解析从文章《Dubbo原理和源码解析之标签解析》中我们知道,<dubbo:service> 标签会被解析成 ServiceBean。
ServiceBean 实现了 InitializingBean,在类加载完成之后会调用 afterPropertiesSet() 方法。在 afterPropertiesSet() 方法中,依次解析以下标签信息:
<dubbo:provider>
<dubbo:application>
<dubbo:module>
<dubbo:registry>
<dubbo:monitor>
<dubbo:protocol>
ServiceBean 还实现了 ApplicationListener,在 Spring 容器初始化的时候会调用 onApplicationEvent 方法。ServiceBean 重写了 onApplicationEvent 方法,实现了服务暴露的功能。