dubbo spi解析

1. 什么叫SPI?

简单总结就是一种使用类名字符串来动态实例化java类的方式,也就是反射。

2. java SPI与Dubbo SPI有什么区别

然后在这个文件里面写入实现类

com.blueskykong.javaspi.serializer.KryoSerializer

com.blueskykong.javaspi.serializer.JavaSerializer

但是dubbo的SPI格式变了,也就意味着不能直接使用java SPI了

文件的目录相似,但是里面的内容变为了key-value

adaptive=com.alibaba.dubbo.common.extension.factory.AdaptiveExtensionFactory
spi=com.alibaba.dubbo.common.extension.factory.SpiExtensionFactory

结论:所谓的这些SPI只不过是一种方式而已,最后都是反射生成类(还有classloader的问题,这里我们不讨论),组织方式可以随便变,但是既然是分析dubbo,那么这里就看dubbo是怎么最终实现的

3. 为什么dubbo要自己实现所谓的SPI?

dubbo相当于使用了key-value的形式,用key来映射每个类,这样用户就可以在url加入这个key来实现动态加载某个类的需求,为什么java SPI的方式不行,

无法提供一个规则给使用dubbo的人,可以让他指定要使用哪个类。

4.dubbo spi实现方式详解

4.1 背景

现在使用key-value的方式已经可以由用户指定key去加载class,但是出于系统的考虑还有一些功能需要扩展

  • key-value的指定是由@Adaptive和@SPI来辅助实现,SPI指定类级别的默认的类,Adaptive可以设置函数级别需要加载哪个class
  • 针对FIlter需要指定是否起效,以及在provider起效还是consumer起效,以及Filter之间的优先级

猜你喜欢

转载自www.cnblogs.com/shanchuan04/p/10231104.html