Dubbo的自适应扩展点和激活扩展点

  • 上篇文章写了一下spi在java和spiring中的实现,以及Dubbo中的静态扩展点文章链接,这里接着把Dubbo的自适应扩展点和激活扩展点看完
  • 这里还是上篇的dubbo测试类
public class DubboSpi {
   
    public static void main(String[] args) {
   
        //静态扩展点
        Container myContainer = ExtensionLoader.getExtensionLoader(Container.class).getExtension("myContainer");
        System.out.println(myContainer);
        //输出:com.test.spi.dubbo.MyContainer@6aa8ceb6

        //自适应扩展点,加在类上和加载方法上
        Compiler adaptiveExtension = ExtensionLoader.getExtensionLoader(Compiler.class).getAdaptiveExtension();
        System.out.println(adaptiveExtension);

        //输出:org.apache.dubbo.common.compiler.support.AdaptiveCompiler@759ebb3d
        Protocol adaptiveExtension1 = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
        System.out.println(adaptiveExtension1);
        //输出:org.apache.dubbo.rpc.Protocol$Adaptive@61a485d2


        //激活扩展点
        URL url = new URL("","localhost",8080).addParameters(Constants.DEPRECATED_KEY,Constants.DEPRECATED_KEY);
        List<Filter> activateExtension = ExtensionLoader.getExtensionLoader(Filter.class)
                .getActivateExtension(url, Constants.DEPRECATED_KEY);
        System.out.println(activateExtension);
        //输出:[org.apache.dubbo.rpc.filter.EchoFilter@69ea3742, org.apache.dubbo.rpc.filter.ClassLoaderFilter@4b952a2d, org.apache.dubbo.rpc.filter.GenericFilter@3159c4b8, org.apache.dubbo.rpc.filter.ConsumerContextFilter@73846619, org.apache.dubbo.rpc.filter.ContextFilter@4bec1f0c, org.apache.dubbo.rpc.protocol.dubbo.filter.FutureFilter@29ca901e, org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter@5649fd9b, org.apache.dubbo.rpc.filter.TimeoutFilter@6adede5, org.apache.dubbo.monitor.support.MonitorFilter@2d928643, org.apache.dubbo.rpc.filter.ExceptionFilter@5025a98f, org.apache.dubbo.cache.filter.CacheFilter@49993335]
    }
}
自适应扩展点

我们可以看到自适应扩展点有2种,一种是@Adaptive加载类上,一种是@Adaptive加载方法上,加载方法上的比较简单,我们从getAdaptiveExtension()开始看起,调用路线如下

  • getAdaptiveExtension()
    • createAdaptiveExtension()
      • getAdaptiveExtensionClass() 之后我们还会回到这里
        • getExtensionClasses()
          • loadExtensionClasses()
            • loadDirectory()
              • loadResource()
                • loadClass() 这里就是查看@Adaptive加在类上的关键地方了
private void loadClass(Map<String, Class<?>> extensionClasses, java.net.URL resourceURL, Class<?> clazz, String name) throws NoSuchMethodException {
   
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值