Dubbo原理解析-与spring融合

简介:

Dubbo原理解析-与spring融合

Spring中bean的定义可以通过编程,可以定义在properties文件,也可以定义在通过xml文件中,用的最多的是通过xml形式,由于xml格式具有很好的自说明便于编写及维护。对于xml的文档结构、数据定义及格式验证可以通过DTD和Schema, 在spring2.0之前采用的是DTD,在spring2.0之后采用Schema。使用Schema方式使得spring更加便于与第三方进行集成以及第三方可以提供更简单更便于使用的个性化配置方式。对于XmlSchema具体知识这里不做介绍,但是Schema中有个重要的概念命名空间(namespace)必须要提一下,spring就是利用它来做第三方自定配置格式的解析的,在spring中aop, transaction的就是给第三一个实现自己自定义配置很好实例。

如上图:xmlns=http://www.springframework.org/schema/beans是默认命名空间

xmlns:aop=http://www.springframework.org/schema/aop 定义的aop的命名空间

xmlns:tx="http://www.springframework.org/schema/tx" 定义了事物的命名空间

各命名空间下的格式定义文件通过xsi:schemaLocation来指定。

本文档不是讲解spring的,所以下面只是简略的来讲解spring如果通过schema方式来解析配置文件的。

类DefaultBeanDefinitionDocumentReader会把spring的xml配置文件当做一个文档格式来读取

每读取一个元素节点都会判断下这个元素的命名空间,如果是默认命名空间(http://www.springframework.org/schema/beans)则按默认方式读取bean的定义, 如果不是如namespaceUri如下

http://www.springframework.org/schema/aop,

http://www.springframework.org/schema/tx,

http://code.alibabatech.com/schema/dubbo

则走解析自定义元素流程。根据命名空间去获取具体的处理器NamespaceHandler

DefaultNamespaceHandlerResolver类传了key为namespaceUri,在类中有个Map存储类所有的自定义NamespaceHandler,这个Map中的值是通过工具类PropertiesLoaderUtils加载所有在”META-INF/spring.handlers”中的值

 

此文档主要讲解dbbo的自定义处理器DubboNamespaceHandler来怎样把dubbo自定义的元素转换成的bean定义并注册到spring的容器中去的。

DubboNamespaceHandler中注册了这么多的BeanDefinitionParser用来解析dubbo定义的那些xml元素节点如:

<dubbo:applicationname="dubbo-admin" />

<dubbo:registryaddress="${dubbo.registry.address}" check="false"file="false" />

<dubbo:referenceid="registryService"interface="com.alibaba.dubbo.registry.RegistryService"check="false" />

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

<dubbo:serviceinterface="com.alibaba.dubbo.demo.DemoService"ref="demoService" />

 

各个BeanDefinitionParser会把上面的xml元素转换成spring内部的数据结构BeanDefinition,最终当被引用时实例化成对应的bean如<dubbo:application/>节点得到ApplicationConfig.

当然通过默认配置方式也是可以的如:

<dubbo:registryaddress="${dubbo.registry.address}" check="false"file="false" />

也可以配置成

<bean id=” registry”class=” com.alibaba.dubbo.config.RegistryConfig”/>

<property name=” address” value=” ${dubbo.registry.address}”/>

<property name=” check” value=” false”/>

<property name=” file” value=” false”/>

<bean/>

 

利用自定义元素解析更加简洁,同时也可以屏蔽一些具体的实现类型,如你不需要知道com.alibaba.dubbo.config.RegistryConfig这个类,只需要知道注册registry这个元素就可以了,用户可以通过文档以及schema的在ide中的自动提示可以很方便的去配置。

原文地址http://www.bieryun.com/2071.html

相关文章
|
23天前
|
XML 存储 Java
Spring重要类解析
Spring重要类解析
20 0
|
29天前
|
关系型数据库 MySQL Shell
CMake构建Makefile深度解析:从底层原理到复杂项目(三)
CMake构建Makefile深度解析:从底层原理到复杂项目
31 0
|
29天前
|
编译器 vr&ar C++
CMake构建Makefile深度解析:从底层原理到复杂项目(二)
CMake构建Makefile深度解析:从底层原理到复杂项目
33 0
|
25天前
|
存储 安全 编译器
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
69 0
|
21天前
|
安全 Java 数据安全/隐私保护
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
44 1
|
21天前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
42 0
|
7天前
|
XML Java 数据格式
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
17 0
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
|
7天前
|
XML Java 数据格式
从入门到精通:Spring基础注解的全面解析
从入门到精通:Spring基础注解的全面解析
25 2
从入门到精通:Spring基础注解的全面解析
|
7天前
|
Java 数据库 Spring
切面编程的艺术:Spring动态代理解析与实战
切面编程的艺术:Spring动态代理解析与实战
23 0
切面编程的艺术:Spring动态代理解析与实战
|
7天前
|
Java 关系型数据库 MySQL
高级对象装配:解析Spring创建复杂对象的秘诀
高级对象装配:解析Spring创建复杂对象的秘诀
21 0
高级对象装配:解析Spring创建复杂对象的秘诀

推荐镜像

更多