关于 dubbo 的 SpiExtensionFactory 的一点说明:
本篇文章不想比较 dubbo 的 spi 和 jdk spi 的异同,网上有太多文章写了这块,本篇文章主要想说 dubbo @Adaptive 注解的设计以及 SpiExtensionFactory 类.
我们先看下 SpiExtensionFactory 类:
public <T> T getExtension(Class<T> type, String name) {
// 必须是拓展点接口
if (type.isInterface() && type.isAnnotationPresent(SPI.class)) {
// 获取该拓展点接口对应的 ExtensionLoader 对象
ExtensionLoader<T> loader = ExtensionLoader.getExtensionLoader(type);
// 如果该拓展点有其它的实现类,其它指的是既非 @Adaptive 标注也非该接口包装类
// 返回其 Adaptive 实现类
if (!loader.getSupportedExtensions().isEmpty()) {
return loader.getAdaptiveExtension();(1)
//return loader.getExtension(name);(2)
}
}
return null;
}
小伙伴们有疑问吗?为啥 dubbo 不采用 (2) 这种简单粗暴的做法,而是采用 (1) 这种了?
原因在于 @Adaptive. 如果按照(2) 的做法,那么 dubbo SPI 将不能通过参数控制调用那个实现类,同时关于其层层依赖注入是事先确定的,而采用(1) 这种实现方法,可以通过 URL 指定具体调用的实现类,同时在依赖输入的时候,是注入的 XXX$Adaptive 类,具体的注入会在指定完实际的实现类后进行注入,这样极大的增加了代码的灵活性和可扩展性.
分享到:
相关推荐
### Dubbo中文文档知识点概述 #### 一、Dubbo简介 **Dubbo** 是阿里巴巴开源的一款面向服务架构(SOA)的高性能微服务框架。它主要用于构建基于Java的应用程序,帮助开发者更容易地构建、部署和管理分布式应用。...
【Dubbo安装配置详解】 Dubbo是一款高性能、轻量级的Java开源服务框架,由阿里巴巴公司开发并维护,主要用于实现微服务之间的远程调用。它提供了服务治理、监控和服务发现等功能,是分布式系统架构中的重要组件。在...
在IT行业中,Spring Boot和Dubbo是两个非常重要的框架,分别用于简化Java应用程序的开发和构建高可用、高性能的服务治理平台。Spring Boot以其快速启动、约定优于配置的特点,深受开发者喜爱,而Dubbo则是一个优秀的...
【DUBBO功能使用说明】 DUBBO是一个由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它主要提供RPC(远程过程调用)服务和SOA(面向服务架构)服务治理方案。其核心特性包括透明化的远程方法调用、软负载均衡...
【标题】"dubbo资源 dubbo-admin dubbo demo" 提供的是关于Apache Dubbo的相关素材,主要包括了Dubbo-admin的管理和示例项目。Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能,是阿里...
【标题】:“关于dubbo的demo” 【描述】:“关于阿里巴巴的SOA服务化治理框架dubbo的一个小演示项目,这个工程包含了完整的源代码。在这个demo中,我详细注释了如何配置spring和dubbo,方便理解每个步骤的作用。...
【Dubbo 示例代码详解】 Dubbo 是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它主要提供了RPC(远程过程调用)服务,并且包含了服务注册与发现、负载均衡、容错处理、监控等全面的服务治理功能。本示例...
dubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo...
【标题】"incubator-dubbo-dubbo-2.6.1" 是一个Apache Incubator项目Dubbo的特定版本,这里的2.6.1表示该版本是Dubbo的稳定分支之一。 【描述】提到的"incubator-dubbo-dubbo-2.6.1"表明这是Apache孵化器中的Dubbo...
#### 四、节点角色说明 Dubbo系统中涉及的角色包括: 1. **Provider(服务提供者)**:负责暴露服务的服务提供方。 2. **Consumer(服务消费者)**:负责调用远程服务的服务消费方。 3. **Registry(服务注册...
【标题】"dubbo admin jdk1.8" 指的是使用Java开发工具包(JDK)1.8版本运行的Dubbo管理控制台。Dubbo是阿里巴巴开源的一个高性能、轻量级的服务治理框架,它提供了服务注册、服务发现、调用监控等功能。在JDK1.8...
《Dubbo技术详解与实战应用》 Dubbo是一款由阿里巴巴开源的高性能、轻量级的服务治理框架,它致力于提供一个简单、高效的分布式服务解决方案。在Java世界里,Dubbo已经成为了微服务架构的重要组成部分,其核心特性...
对原有的dubbo远程调用的异步的缺陷性进行了优化方案
5. 源文件概述环节则是对dubbo主要源文件和目录结构进行说明,帮助读者快速找到自己需要阅读的源码位置。 6. 在核心机制分析环节中,涉及了dubbo中的设计模式、Bean加载机制、Spring可扩展Schema、代理、远程调用...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和...基于SpringBoot Dubbo RocketMQ的订单支付系统源码+项目说明+数据库.zip
### Dubbo监控系统配置详解 #### 一、Dubbo监控系统概述 Dubbo是一款高性能、轻量级的开源服务框架,旨在提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo提供了包括服务自动注册与发现、...
本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...
【标题】"dubbo-admin包"是Dubbo框架的一个重要组成部分,主要用作服务治理的管理界面。这个压缩包包含了运行Dubbo管理控制台所需的所有文件,使得开发者和运维人员可以方便地监控、管理和配置Dubbo服务。 【描述】...