`

关于 dubbo 的 SpiExtensionFactory 的一点说明

阅读更多
关于 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 类,具体的注入会在指定完实际的实现类后进行注入,这样极大的增加了代码的灵活性和可扩展性.

0
0
分享到:
评论

相关推荐

    dubbo中文文档说明

    ### Dubbo中文文档知识点概述 #### 一、Dubbo简介 **Dubbo** 是阿里巴巴开源的一款面向服务架构(SOA)的高性能微服务框架。它主要用于构建基于Java的应用程序,帮助开发者更容易地构建、部署和管理分布式应用。...

    dubbo安装配置说明

    【Dubbo安装配置详解】 Dubbo是一款高性能、轻量级的Java开源服务框架,由阿里巴巴公司开发并维护,主要用于实现微服务之间的远程调用。它提供了服务治理、监控和服务发现等功能,是分布式系统架构中的重要组件。在...

    springboot2.0版整合dubbo即详细说明

    在IT行业中,Spring Boot和Dubbo是两个非常重要的框架,分别用于简化Java应用程序的开发和构建高可用、高性能的服务治理平台。Spring Boot以其快速启动、约定优于配置的特点,深受开发者喜爱,而Dubbo则是一个优秀的...

    DUBBO功能使用说明

    【DUBBO功能使用说明】 DUBBO是一个由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它主要提供RPC(远程过程调用)服务和SOA(面向服务架构)服务治理方案。其核心特性包括透明化的远程方法调用、软负载均衡...

    dubbo资源 dubbo-admin dubbo demo

    【标题】"dubbo资源 dubbo-admin dubbo demo" 提供的是关于Apache Dubbo的相关素材,主要包括了Dubbo-admin的管理和示例项目。Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能,是阿里...

    关于dubbo的demo

    【标题】:“关于dubbo的demo” 【描述】:“关于阿里巴巴的SOA服务化治理框架dubbo的一个小演示项目,这个工程包含了完整的源代码。在这个demo中,我详细注释了如何配置spring和dubbo,方便理解每个步骤的作用。...

    dubbo-dubbo-2.7.3.rar

    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...

    dubbo示例代码dubbo-sample

    【Dubbo 示例代码详解】 Dubbo 是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它主要提供了RPC(远程过程调用)服务,并且包含了服务注册与发现、负载均衡、容错处理、监控等全面的服务治理功能。本示例...

    incubator-dubbo-dubbo-2.6.1

    【标题】"incubator-dubbo-dubbo-2.6.1" 是一个Apache Incubator项目Dubbo的特定版本,这里的2.6.1表示该版本是Dubbo的稳定分支之一。 【描述】提到的"incubator-dubbo-dubbo-2.6.1"表明这是Apache孵化器中的Dubbo...

    Dubbo介绍.pptx

    #### 四、节点角色说明 Dubbo系统中涉及的角色包括: 1. **Provider(服务提供者)**:负责暴露服务的服务提供方。 2. **Consumer(服务消费者)**:负责调用远程服务的服务消费方。 3. **Registry(服务注册...

    dubbo admin jdk1.8

    【标题】"dubbo admin jdk1.8" 指的是使用Java开发工具包(JDK)1.8版本运行的Dubbo管理控制台。Dubbo是阿里巴巴开源的一个高性能、轻量级的服务治理框架,它提供了服务注册、服务发现、调用监控等功能。在JDK1.8...

    dubbodubbo.zip

    《Dubbo技术详解与实战应用》 Dubbo是一款由阿里巴巴开源的高性能、轻量级的服务治理框架,它致力于提供一个简单、高效的分布式服务解决方案。在Java世界里,Dubbo已经成为了微服务架构的重要组成部分,其核心特性...

    关于Dubbo异步调用的优化

    对原有的dubbo远程调用的异步的缺陷性进行了优化方案

    dubbo源码解析

    5. 源文件概述环节则是对dubbo主要源文件和目录结构进行说明,帮助读者快速找到自己需要阅读的源码位置。 6. 在核心机制分析环节中,涉及了dubbo中的设计模式、Bean加载机制、Spring可扩展Schema、代理、远程调用...

    基于SpringBoot Dubbo RocketMQ的订单支付系统源码+项目说明+数据库.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和...基于SpringBoot Dubbo RocketMQ的订单支付系统源码+项目说明+数据库.zip

    Dubbo监控系统配置

    ### Dubbo监控系统配置详解 #### 一、Dubbo监控系统概述 Dubbo是一款高性能、轻量级的开源服务框架,旨在提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo提供了包括服务自动注册与发现、...

    尚硅谷最新dubbo视频

    本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...

    dubbo-admin包

    【标题】"dubbo-admin包"是Dubbo框架的一个重要组成部分,主要用作服务治理的管理界面。这个压缩包包含了运行Dubbo管理控制台所需的所有文件,使得开发者和运维人员可以方便地监控、管理和配置Dubbo服务。 【描述】...

Global site tag (gtag.js) - Google Analytics