欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

dubbo实现原理之SPI简介

发布时间:2025/3/15 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 dubbo实现原理之SPI简介 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

  dubbo采用微内核+插件体系,设计优雅,扩展性很强。微内核+插件体系是如何实现的呢?想必大家都知道SPI(service provider interface)机制。这种机制的原理是假如我们定义了服务接口标准,可以让厂商无实现。在jdk中,使用ServiceLoader类来实现spi机制的服务查找功能。

  接下来我们使用一个简单的例子,通过ServiceLoader来实现spi机制。先定义一个接口:

package com.ysl;public interface Spi {boolean isSupportType(String type);String sayGoodBy(); }

  ServiceLoader会遍历所有的jar去查找META-INF/services/com.ysl.Spi文件

  假设A厂商提供的实现如下:

package com.ysl;public class SpiAImpl implements Spi{@Overridepublic boolean isSupportType(String type) {return "A".equals(type);}@Overridepublic String sayGoodBy() {return "bye bye A";} }

  在A厂商提供的jar包中的META-INF/services/com.ysl.Spi文件内容为:com.ysl.SpiAImpl(厂商A的spi实现全路径类名)

  假设B厂商提供的实现如下: 

package com.ysl;public class SpiBImpl implements Spi{@Overridepublic boolean isSupportType(String type) {return "B".equals(type);}@Overridepublic String sayGoodBy() {return "bye bye B";} }

  在B厂商提供的jar包中的META-INF/services/com.ysl.Spi文件内容为:com.ysl.SpiBImpl(厂商B的spi实现全路径类名)

  ServiceLoader.load(Spi.class)读取厂商A、B提供jar包中的文件,ServiceLoader实现了Iterable接口可通过while for循环语句遍历出所有实现。

  一个接口多种实现,就如策略模式一样提供了策略的实现,但是没有提供策略的选择, 使用方可以根据isSupport方法根据业务传入厂商名来选择具体的厂商。

package com.ysl;import java.util.ServiceLoader;public class SpiFactory {private static ServiceLoader spiLoader = ServiceLoader.load(Spi.class);public static Spi getSpi(String name){for(Spi spi : spiLoader){if(spi.isSupportType(name)){return spi;}}return null;} }

 

转载于:https://www.cnblogs.com/senlinyang/p/8612458.html

总结

以上是生活随笔为你收集整理的dubbo实现原理之SPI简介的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。