【Dubbo 源码解析】08_Dubbo与Spring结合

Dubbo 与 Spring 结合

基于 dubbo.jar 内的 META-INF/spring.handlers 配置,Spring 在遇到 dubbo 名称空间时,会回调 DubboNamespaceHandlerspring

全部 dubbo 的标签,都统一用 DubboBeanDefinitionParser 进行解析,基于一对一属性映射,将 XML 标签解析为 Bean 对象。spa

ServiceConfig.export()ReferenceConfig.get() 初始化时,将 Bean 对象转换 URL 格式,全部 Bean 属性转成 URL 的参数。code

而后将 URL 传给协议扩展点,基于扩展点的扩展点自适应机制(Dubbo SPI),根据 URL 的协议头,进行不一样协议的服务暴露或引用。xml

 

执行过程:

  1. spring 扫描全部 jar 下 META-INF/spring.handlersMETA-INF/spring.schemas对象

  2. 运行dubbo.jar/META-INF/spring.handlers下定义的DubboNamespaceHandler的 init() 方法事件

  3. spring 加载 xml,执行 DubboBeanDefinitionParser 的 parse() 方法,经过RootBeanDefinition将serviceBean 暴露给 spring。(实际调用AutowireCapableBeanFactory.registerBeanDefinition)get

  4. ServiceBean 实现了 ApplicationListener<ContextRefreshedEvent>,Spring 容器 refresh() 以后,发送 Event 事件,而后 ServiceBean 作服务暴露操做。(服务暴露it

  5. ReferenceBean 实现了 InitializingBean,在 Bean 实例化过程当中会调用 afterPropertiesSet(),而后 ReferenceBean 作服务引用操做。(服务引用io

其中比较重要的是 ServiceBean 和 ReferenceBean。class