美文网首页
自适应扩展类

自适应扩展类

作者: Britney_z | 来源:发表于2019-06-06 15:15 被阅读0次

Cluster自适应扩展类:

我们在代码中不可能写死使用哪个扩展点,所以才会生成自适应扩展类,如果某个某个实现类被 Adaptive 注解修饰了,那么该类就是自适应扩展类了,不然会生成自适应扩展类。

看看导出的其中一个服务,像protocol等,如果配置了就使用配置的,如果没有配置就使用dubbo

我们那cluster举例,

生成的类名:Cluster$Adpative

从url取配置的策略,如果没有配置默认就是使用failover。

 String extName = url.getParameter("cluster", "failover");

根据extName动态生成扩展点

  com.alibaba.dubbo.rpc.cluster.Cluster extension =     (com.alibaba.dubbo.rpc.cluster.Cluster)ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.cluster.Cluster.class).getExtension(extName);

?xml version="1.0" encoding="UTF-8"?

package com.alibaba.dubbo.rpc.cluster;

importcom.alibaba.dubbo.common.extension.ExtensionLoader;

public class Cluster$Adpative implements com.alibaba.dubbo.rpc.cluster.Cluster {

public com.alibaba.dubbo.rpc.Invoker join(com.alibaba.dubbo.rpc.cluster.Directory arg0) throws com.alibaba.dubbo.rpc.cluster.Directory {

    if (arg0 == null) throw new IllegalArgumentException("com.alibaba.dubbo.rpc.cluster.Directory     argument == null");

    if (arg0.getUrl() == null) throw new     IllegalArgumentException("com.alibaba.dubbo.rpc.cluster.Directory argument getUrl() ==     null");

    com.alibaba.dubbo.common.URLurl = arg0.getUrl();

    String extName = url.getParameter("cluster", "failover");

    if(extName == null) throw new IllegalStateException("Fail to get     extension(com.alibaba.dubbo.rpc.cluster.Cluster) name from url(" + url.toString() + ") use     keys([cluster])");

    com.alibaba.dubbo.rpc.cluster.Cluster extension =     (com.alibaba.dubbo.rpc.cluster.Cluster)ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.r     pc.cluster.Cluster.class).getExtension(extName);

    return extension.join(arg0);

}

}

相关文章

  • 自适应扩展类

    Cluster自适应扩展类: 我们在代码中不可能写死使用哪个扩展点,所以才会生成自适应扩展类,如果某个某个实现类被...

  • Swift开发iOS--仿微信朋友圈(4)

    Swift开发iOS--仿微信朋友圈(4)——cell高度自适应cell高度设置在 扩展String类,实现根据字...

  • dubbo系列之-SPI(2)-2021-01-09

    背景 接下去我们分析下自适应扩展点也就是代码中所对应的 这个Adaptive 注解可以加在类上也可以加在方法上,当...

  • bootstrap笔记

    1、图片自适应 加类名 ;img-responsive; 2、按钮自适应 加类名:btn-block; 3、boo...

  • (SPI)3.dubbo spi代码分析

    看三个方法,静态扩展类,adapter扩展类,activate扩展类。先看getExtension 获取实现类对象...

  • JQuery插件

    类扩展: 对象扩展:

  • Kotlin-面向对象-进阶

    扩展 扩展方法 Kotlin支持扩展方法和扩展属性。语法:被扩展的类/接口名.方法名() 父类不能使用子类的扩展方...

  • 类扩展

    类扩展 (Class Extension也有人称为匿名分类) 作用:能为某个类附加额外的属性,成员变量,方法声明一...

  • 类扩展

    Method Swizzling是改变一个selector的实际实现的技术。通过这一技术,我们可以在运行时通过修改...

  • 类扩展

    1.类扩展:为某一个类扩充私有成员变量和方法,写在.m文件中, 英文名Class Estension 格式:@in...

网友评论

      本文标题:自适应扩展类

      本文链接:https://www.haomeiwen.com/subject/irxuxctx.html