dubbo SPI机制中getExtensionLoade()方法

本文深入探讨了Dubbo SPI机制中的ExtensionLoader.getExtensionLoader方法。该方法根据输入参数获取指定类型的ExtensionLoader实例,并缓存在EXTENSION_LOADERS中以供后续使用。文章详细介绍了ExtensionLoader的构造过程及objectFactory的作用。

本文讨论dubbo SPI机制中ExtensionLoader.getExtensionLoade(Class type)方法

ExtensionLoader.getExtensionLoade(Classtype)本质就是根据传入的形参,获取一个该类型的ExtensionLoader,然后缓存到EXTENSION_LOADERS,下次直接get。

举个例子:type为com.alibaba.dubbo.container.Container-----> com.alibaba.dubbo.common.extension.ExtensionLoader[com.alibaba.dubbo.container.Container]

涉及的代码如下:

 public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) {
        //...去掉了if判断逻辑
        
        ExtensionLoader<T> loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type);
        if (loader == null) {
            EXTENSION_LOADERS.putIfAbsent(type, new ExtensionLoader<T>(type));//私有构造方法
            loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type);
        }
        return loader;
    }
     private ExtensionLoader(Class<?> type) {
        this.type = type;//扩展点的接口类型
        objectFactory = (type == ExtensionFactory.class ? null : ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension());
    }
复制代码

ExtensionLoader的构造方法是私有的,涉及到单例模式。 在这个构造方法中,首先会判断type是否是ExtensionFactory,若是,objectFactory=null。否则获取ExtensionFactory的扩展。(getAdaptiveExtension方法下次介绍)

objectFactory这个变量到底是什么呢?

1.在ExtensionLoader是这样定义的 private final ExtensionFactory objectFactory;它是一个ExtensionFactory。

2.通过ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension()获取。

3.它就是为dubbo的IOC提供所有对象。

转载于:https://juejin.im/post/5a51992d518825733b0eb3c9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值