【dubbo源码分析】dubbo com.alibaba.dubbo.common.extension.ExtensionFactory之Adaptive类

11 篇文章 0 订阅
@SPI
public interface ExtensionFactory {
    <T> T getExtension(Class<T> type, String name);
}
ExtensionFactory 是根工厂类,是后续获取各个Extension的基础,是其他Extension的 ObjectFactory
在ExtensionLoader 中有个私有构造函数
private ExtensionLoader(Class<?> type) {
        this.type = type;
        objectFactory = (type == ExtensionFactory.class ? null : ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension());
    }
当type为 ExtensionFactory 时, ExtensionFactory 的ExtensionLoader.objectFactory为空,即
new ExtensionLoader(){
type = com.alibaba.dubbo.common.extension.ExtensionFactory;
objectFactory = null;
}
而在
ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension();获取适配类时有两个原则,如果spi扩展点获取到的类中有 @Adaptive注解标注的类,则设置为该type类型的
Adaptive类,如果没有获取到,则动态创建Adaptive代理类。

由于META-INF/dubbo/internal/com.alibaba.dubbo.common.extension.ExtensionFactory
文件下定义了如下类
adaptive=com.alibaba.dubbo.common.extension.factory.AdaptiveExtensionFactory --> Adaptive类
spi=com.alibaba.dubbo.common.extension.factory.SpiExtensionFactory
spring=com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory

由ExtensionLoader.loadFile 中有这么一段,因此 ExtensionFactory 的Adaptive类为 AdaptiveExtensionFactory


初始化 AdaptiveExtensionFactory

可知除了Class = ExtensionFactory.class 的objectFactory为空 外,其他type 类型的objectFactory均为 包含有 factorys=[SpiExtensionFactory,SpringExtensionFactory]AdaptiveExtensionFactory

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值