sofa-rpc 的SPI机制和dubbo的SPI机制都是同源于java的SPI,通过SPI你可以在不改变内核任何源码的情况下进行扩展,甚至替换组件。

    java的spi,可以通过博文

https://docs.oracle.com/javase/tutorial/ext/basics/spi.html
<https://docs.oracle.com/javase/tutorial/ext/basics/spi.html> 与
https://www.developer.com/java/article.php/3848881/Service-Provider-Interface-Creating-Extensible-Java-Applications.htm

<https://www.developer.com/java/article.php/3848881/Service-Provider-Interface-Creating-Extensible-Java-Applications.htm>
 对其基本了解。

sofa-rpc 的SPI的功能主要关键点:

(1)引入注解@Extensible

        代表这个抽象类或者接口是可扩展的,可以配置指定自定义扩展文件名称,默认就是全类名;扩展类是否使用单例,默认使用。




(2)引入注解@Extension

        标识该类是一个扩展实现类,可以指定扩展点的名字,也可以在扩展点文件中指定,不过同时指定,名字必须相同。




(3)扩展点配置文件默认路径:META-INF/services/sofa-rpc/、META-INF/services/




   当然,sofa-rpc也支持自定义这些路径(除非必要,建议按默认约定)。路径当然和java 和dubbo的路径是不同的。




(4)ExtensionClass:

    代码扩展接口实现类,从配置文件读取路径,并结合注解Extension而生成的。




(5)ExtensionLoader

    一个可扩展接口类,对应一个加载器;主要职责是从配置路径中读取并实例化一个可扩展接口的所有实现类。





(6)ExtensionLoaderFactory

    ExtensionLoader的工程类,并且做了ExtensionLoader的缓存。





   sofa-rpc 已知的扩展:











具体例子见:https://github.com/alipay/sofa-rpc/wiki/Extension-Loader
<https://github.com/alipay/sofa-rpc/wiki/Extension-Loader>


https://github.com/sdcuike/sofa-rpc-demo/blob/master/src/main/java/com/sdcuike/extensionloader/DemoSeviceLoaderMain.java

<https://github.com/sdcuike/sofa-rpc-demo/blob/master/src/main/java/com/sdcuike/extensionloader/DemoSeviceLoaderMain.java>















友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信