您的位置:首页 > 编程语言 > Java开发

dubbo源码分析之与spring集成

2018-03-02 14:30 363 查看
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的创建(也即连接注册中心,通过注册中心得到可用的服务提供方,并与服务提供方建立连接)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring dubbo