Dubbo 源码分析 - Dubbo SPI 获取扩展点实现类对象

开篇

前面用了4 篇文章分析了 Dubbo SPI 的几种用法以及如何在 Dubbo 中应用的,

本文通过 Debug Dubbo2.7.x 源码的方法分析 如何通过 getExtension(name) 获取一个扩展对象实例

正文

回顾一下 Dubbo SPI 的最基本的用法

public class App 
{
    public static void main( String[] args )
    {
		// 第一步
        ExtensionLoader<HelloService> extensionLoader = ExtensionLoader.getExtensionLoader(HelloService.class);
        // 第二步
        HelloService helloService = extensionLoader.getExtension("helloService");
        // 第三步
        helloService.sayHello("xiaoming");
    }
}

我们直接从第二步 debug 进入getExtension(name)方法

1. ExtensionLoader 的属性

在 debug 进入方法之前, 先来看几个 ExtensionLoader的属性

   
    // 1. 扩展接口, 比如 Protocol
    private final Class<?> type;
    
    // 2. 扩展实现类集合, key 为 Protocol , value 为 DubboProtocol
    private static final ConcurrentMap<Class<?>, Object> EXTENSION_INSTANCES = new ConcurrentHashMap<>();
    
    // 3. (缓存的)扩展实现类集合
    private final Holder<Map
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值