# dubbo-apache-source-parent **Repository Path**: automannn/dubbo-apache-source-parent ## Basic Information - **Project Name**: dubbo-apache-source-parent - **Description**: 开源dubbo源码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-07-23 - **Last Updated**: 2024-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 源码概要 1. 在dubbo抽象层次划分中, `远程调用层Protocol`是 核心层, 也就是,只要有 `Protocol+ Invoker+ Exporter` 就可以完成非透明的RPC调用, 然后在Invoker的主过程上`Filter`拦截点。 2. 在dubbo抽象层次划分中, `集群层Cluster`是 外围概念,目的是将多个`Invoker`伪装成一个 `Invoker`,这样其他人只需要关注Protocol层的Invoker即可。 加上或者去掉Cluster对其他层不会造成影响。 3. 在dubbo抽象层次划分中, `服务代理层Proxy` 实现了 所有接口的透明化代理。 去掉proxy层,也是可以使用的,只是不那么透明,看起来不那么像调本地服务。 4. 在dubbo抽象层次划分中, `传输层Transport` 负责单向消息传输,是对 Mina,Netty,Grizzly的抽象,也可扩展为 UDP传输。 `信息交换层Exchange`,是在传输层之上,封装的 `Request-Response`语义。 5. 在dubbo抽象层次划分中, `服务注册层Register` 和 `监控层Monitor` 实际上不算一层,只是为了全局概览,用层的方式画在一起。 6. `ExtensionLoader`类,以及 `@SPI`,`@Adaptive`,`@Activate`在整个dubbo体系中,具有十分重要的作用。 其中,`ExtensionLoader`是一个全局静态类,它相当于一个`抽象工厂`,其内部维护了一个 `类与ExtensionLoader的映射关系`。它们组合起来,形成了一个工厂模式。 具体而言,由 `ExtensionLoader+泛型`的方式,组成一个工厂。每个工厂,由具有一个**具体工厂**。这个`具体工厂`,可以由 `@SPI(value=xxx)`指定,也可以由 `@Adaptive`指定. 其中,`@Adaptive`指定的优先级,会高于 `@SPI`,并且 `@SPI(value=xxx)`指定的具体工厂,需要使用 编译器重新编译,也就是一个`动态代理类`。 此外,具体工厂里面,存储的是 `对应扩展类的实例`。 这个实例,既可以是 单个实例,也可以是 `实例列表`。 7. dubbo与mybatis类似,本身已经是很完整的一套体系(与spring类似,实现了一套上下文体系)。同时dubbo本身自带与spring集成的功能。