基于 dubbo.jar 内的 META-INF/spring.handlers
配置,Spring 在遇到 dubbo 名称空间时,会回调 DubboNamespaceHandler
。spring
全部 dubbo 的标签,都统一用 DubboBeanDefinitionParser
进行解析,基于一对一属性映射,将 XML 标签解析为 Bean 对象。spa
在 ServiceConfig.export()
或 ReferenceConfig.get()
初始化时,将 Bean 对象转换 URL 格式,全部 Bean 属性转成 URL 的参数。code
而后将 URL 传给协议扩展点,基于扩展点的扩展点自适应机制(Dubbo SPI),根据 URL 的协议头,进行不一样协议的服务暴露或引用。xml
spring 扫描全部 jar 下 META-INF/spring.handlers
和 META-INF/spring.schemas
对象
运行dubbo.jar/META-INF/spring.handlers
下定义的DubboNamespaceHandler
的 init() 方法事件
spring 加载 xml,执行 DubboBeanDefinitionParser
的 parse() 方法,经过RootBeanDefinition将serviceBean 暴露给 spring。(实际调用AutowireCapableBeanFactory.registerBeanDefinition)get
ServiceBean 实现了 ApplicationListener<ContextRefreshedEvent>
,Spring 容器 refresh() 以后,发送 Event 事件,而后 ServiceBean 作服务暴露操做。(服务暴露)it
ReferenceBean 实现了 InitializingBean,在 Bean 实例化过程当中会调用 afterPropertiesSet(),而后 ReferenceBean 作服务引用操做。(服务引用)io
其中比较重要的是 ServiceBean 和 ReferenceBean。class