dubbo源码分析之与spring集成

本文介绍了Dubbo如何通过Spring的Schema扩展机制实现与Spring框架的集成,详细解析了Dubbo配置解析的过程,包括DubboNamespaceHandler的作用及DubboBeanDefinitionParser如何处理各种配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring之前schema扩展,dubbo使用的是spring 的schema扩展

首先,定义了一个namespaceHandler类,如下

com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler

在这个类中定义了标签解析的类

com.alibaba.dubbo.config.spring.schema.DubboBeanDefinitionParser#DubboBeanDefinitionParser

public void init() {
    registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));
       registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true));
       registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true));
       registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));
       registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));
       registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));
       registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));
       registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));
       registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));
       registerBeanDefinitionParser("annotation", new DubboBeanDefinitionParser(AnnotationBean.class, true));
   }

spring容器启动的时候,会根据spring的xml文件中的命名空间等信息找到对应的NameSpaceHandler

命名空间和NameSpaceHandler的对应关系在jar包的META-INF的spring.handlers中配置,如下

http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler
xsd文件映射关系在META-INF的spring.schemas中配置,如下
http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd

如下是一个使用dubbo命名空间的spring xml文件示例


<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

   <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />

</beans>

com.alibaba.dubbo.config.spring.schema.DubboBeanDefinitionParser#parse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext)  这个是解析入口, 在这个方法中根据xml中的配置处理property


解析完成之后,在afterPropertiesSet方法中会进行各自的一些操作,

比如ServiceBean会进行export操作

com.alibaba.dubbo.config.spring.ServiceBean#afterPropertiesSet

比如ReferenceBean会进行proxy的创建(也即连接注册中心,通过注册中心得到可用的服务提供方,并与服务提供方建立连接)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值