美文网首页
白话dubbo spi和javaspi的区别

白话dubbo spi和javaspi的区别

作者: 大强斌 | 来源:发表于2021-03-28 11:52 被阅读0次

    问题dubbospi存在的意义是什么?如何实现的?

    ExtensionLoader.getExtensionLoader(Filter.class).getExtension("mymock");

    dubbo spi 存在的意义

    1延时加载,需要再生成,利用缓存机制,缓存名字和实现类对应的关系,如果没有找到,再根据javaspi的技术去利用反射生成,并加入到缓存集合中,方便下次再使用。

    2 依赖其他spi接口会自动根据名字查找实现类,并注入属性。.

           代码实现 injectExtension方法。

    基本过程:

               1  获取属性字段 ,排除java本身基本的类型。

               2利用反射机制查出要注入的字段属性名字,然后去spi缓存去查找。如果查找出来就会设置属性

     2 可以根据参数,先择我要使用的实现类。

    举例

    ZookeeperTransporter zookeeperTransporter = ExtensionLoader.getExtensionLoader(ZookeeperTransporter.class).getAdaptiveExtension();

    实现原理:动态生成了一个类,实现了ZookeeperTransporter 接口中标注有@Adapter("A")的方法,

    大概思想,从入参url 获取@Adapter 注解的值 对应的参数的值,说白了就url.getParameter("A"),值作为名字,再调用ExtensionLoader.getExtensionLoader(Filter.class).getExtension("mymock"); 获取名字对应的实现类。

    对应的源码入口

    @Activate 作用 1 可以同时激活多个扩展实现,并定义调用的顺序性。举个例子,同时激活 A B  C,扩展类,至于激活的条件,可以通过group 和value进行设置,

    group代表 选取标有@Activate  的扩展类的实例,并且扩展类的实例 对应的group属性和Activate设置的属性一样。

    value 可以设置 key:value值对,表明Active的扩展类的属性,如果我url传递进来的key value 和扩展类的key value 一样。此扩展类就是我要选择的

    相关文章

      网友评论

          本文标题:白话dubbo spi和javaspi的区别

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