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
命名空间和NameSpaceHandler的对应关系在jar包的META-INF的spring.handlers中配置,如下
如下是一个使用dubbo命名空间的spring xml文件示例
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的创建(也即连接注册中心,通过注册中心得到可用的服务提供方,并与服务提供方建立连接)
首先,定义了一个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.DubboNamespaceHandlerxsd文件映射关系在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的创建(也即连接注册中心,通过注册中心得到可用的服务提供方,并与服务提供方建立连接)
相关文章推荐
- Dubbo源码分析之二:spring集成之注解
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
- Spring集成Mybatis配置与源码分析
- Dubbo2.7源码分析-Dubbo是如何整合spring-framework的
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
- 【SSM框架】Spring集成Dubbo服务(附带源码)
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
- RPC框架(五)dubbo源码分析--Spring解析dubbo标签
- Dubbo源码分析(三):自定义Schema--基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
- spring cloud集成 consul源码分析
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
- jeecms 2012 源码分析(三)------ Spring + FreeMarker的集成。
- spring cloud 集成 prometheus 源码分析
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析
- Spring-boot 集成 kakfa 源码分析
- Spring集成Spring-data-redis RedisCacheManager缓存源码分析