文章目录

  • 前言
  • 一、基于schema设计解析
  • 二、基于XML配置原理解析
  • 三、基于注解配置原理解析



前言

Dubbo提供三种配置方式:XML、注解、属性文件(properties 和 yaml)


一、基于schema设计解析

Dubbo配置约束文件在 dubbo-config/dubbo-config-spring/src/main/resources/dubbo.xsd 中,文件用于约束使用XML配置时标签和对应的属性。在IDEA中能自动查询,这个文件,用户使用属性时进行自动提示。

当Spring解析到自定义的namapspace便签,会查找对应的 spring.schemasspring.handlers 文件,最终触发DubboNamespaceHandler类来进行初始化和解析

当基于Dubbo二次开发,应该在schema中添加合适字段,同时在对应的Config类中加属性和 get&set 方法,配置属性框架时会自动注入,并定义element标签。大部分场景默认Dubbo配置已足够,新增特性只需在对应的Config类中添加新属性即可。

二、基于XML配置原理解析

主要解析逻辑入口是在 DubboNamespaceHandler 类完成

DubboNamespaceHandler 把不同的标签委托给 DubboBeanDefinitionParsser 实现。

beanclass 交给Spring反射创建实例,尝试获取XML配置标签name和interface作为Bean的唯一id,默认使用dubbo协议,后续会追加属性。

解析标签,是获取具体配置对象的所有方法,找到所有set前缀的方法,提取set对应的属性名字,获取标签的属性值,不匹配的属性当作parameters注入Bean props中

三、基于注解配置原理解析

第一部分如果用户使用了配置文件,则框架按需生成对应Bean

  1. 如果用户陪住属性,自动创建对应SpringBean到容器
  2. 注册和配置对象Bean属性绑定处理器DubboConfigBingingBeanPostProcessor,委托Spring做属性值绑定。

第二部分将所有使用Dubbo注解@Service的class提升为Bean

  1. 注解扫描,委托spring对所有符合包名的.class文件做字节码分析
  2. 配置扫描@service注解作为过滤条件
  3. 将@service标注服务提升为不用的bean,
  4. 根据注册的普通Bean生成ServiceBean占位符,用于属性注入逻辑

第三部分使用@Reference注解的字段或方法注入代理对象

  1. 利用扩展点查找服务引用的字段或方法
  2. 触发字段或反射方法值的注入