Dubbo之DubboNamespaceHandler

功能描述

功能简述

参考链接

功能分析

核心类分析

org.apache.dubbo.config.spring.schema.DubboNamespaceHandler //命名空间处理类

  • 继承关系:

    • public class DubboNamespaceHandler extends NamespaceHandlerSupport implements ConfigurableSourceBeanMetadataElement
    • public abstract class NamespaceHandlerSupport implements NamespaceHandler //spring的命名空间处理类
  • 主要功能描述:
    *

  • 主要的成员属性:
    1.

  • 主要的成员方法

    1. public void init(); //在解析自定义元素前,进行初始化操作
    2. public BeanDefinition parse(Element element, ParserContext parserContext); //解析自定义元素
    3. private void registerAnnotationConfigProcessors(BeanDefinitionRegistry registry) //注册注解配置处理器
  • 核心方法的逻辑:

  1. 检查版本方法
-> static //静态代码块
   -> Version.checkDuplicate(DubboNamespaceHandler.class);
      -> checkDuplicate(cls, false);
         -> checkDuplicate(cls.getName().replace('.', '/') + ".class", failOnError); //将类路径转换为资源路径
            -> try
               -> Set<String> files = getResources(path); //加载指定路径下的文件
               -> if::(files.size > 1) //找到重复的jar包
                   -> String error = "Duplicate class " + path + " in " + files.size() + " jar " + files;
                   -> if::failOnError //若需要抛出异常,则抛异常,否则只打error日志,不终止服务
                      -> throw new IllegalStateException(error);
                   -> else
                      -> logger.error(error); 
           -> catch(Throwable e) //Throwable能接收到IllegalStateException异常信息
              -> logger.error(e.getMessage(), e);              

org.apache.dubbo.config.spring.schema.DubboBeanDefinitionParser //xxx类

  • 继承关系:

  • 主要功能描述:

  • 主要的成员属性:

    1. xxx
    2. yyy
  • 主要的成员方法

    1. xxx
    2. yyy
  • 核心方法的逻辑:

-> xxx
   -> yyy
     -> zzz

核心逻辑分析

DubboBeanDefinitionParser#parse_解析自定义标签_流程分析

  • 分析目标:Dubbo自定义标签的解析

  • 流程分析

-> xxx
   -> yyy
     -> zzz
  • 归纳总结:
    1. 进入DubboBeanDefinitionParser#parse的步骤
      Dubbo服务启动 -> Spring容器初始化 -> 解析XML中元素 -> 遇到dubbo:xxx/自定义元素,从spring.handlers文件中读取元素处理器
      -> DubboNamespaceHandler#init注册元素和对应的解析器 -> 使用解析器解析自定义元素DubboBeanDefinitionParser#parse

核心数据分析

{
 "name":"zhang"
}

xxx_数据分析

核心问题解决

xxx问题

  • 问题描述

  • 解决方案

  • 相关总结

关联功能分析

xxx功能

问题点答疑

  1. DubboBeanUtils#registerCommonBeans功能用途是什么?2023/05/19 OK

    • 解答:用来注册含有基本功能的bean,如DubboBootstrapApplicationListener、ReferenceAnnotationBeanPostProcessor等等
      会打印出"The Infrastructure bean definition"日志
  2. 是怎样加载到自定义的DubboNamespaceHandler的?文件中要怎样配置?怎么找到DubboNamespaceHandler的?

  3. parameters、methods、argumentsdubbo:xxx/标签中属性是在哪些场景会用到的?

  4. org.springframework.beans.factory.config.RuntimeBeanReference的用途是怎样的?

  5. DubboNamespaceHandler#init是static方法,是在spring bean创建之前还是创建之后处理的?

  6. DubboNamespaceHandler是在哪里创建、哪里使用的?

  7. org.apache.dubbo.common.Version的功能用途是怎样的?

  8. DubboBeanDefinitionParser#parse中是怎么创建Config对应的Bean的?

  9. DubboBeanDefinitionParser#parse目标是解析元素的值,设置到bean的属性中,那什么时候才写入Config对象中的?

归纳总结

  1. xxx
  2. yyy

你可能感兴趣的:(dubbo)