Dubbo源码学习--Dubbo与Spring融合
Spring是java开发中最常用的实例管理框架了,接下来我们简单介绍一下Dubbo是如何和Spring进行整合的。
1、Dubbo Spring开发配置
在dubbo通过spring进行开发时一般会进行如下配置,dubbo使用的是一些自定义的标签
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="hello-world-app" />
<dubbo:registry address="multicast://224.5.6.7:1234" />
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoServiceLocal" />
<dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" />
</beans>
2、Dubbo标签解析
在学习Dubbo的标签解析之前可以先看看 Spring源码学习—自定义标签,这样对Dubbo的相关标签解析就比较容易接受了,简单来说Dubbo提供了一个命名空间解析器DubboNamespaceHandler,在DubboNamespaceHandler中完成了dubbo相关自定义标签的解析操作。
public class DubboNamespaceHandler extends NamespaceHandlerSupport {
static {
Version.checkDuplicate(DubboNamespaceHandler.class);
}
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 AnnotationBeanDefinitionParser());//注解相关的标签解析
}
}
通过对xml的配置解析产生对应的bean实体,完成相关服务的准备工作。
在Dubbo发布的jar中会携带以下DubboNamespacehandler相关的文件。
还没有评论,来说两句吧...