Dubbo源码解析 - dubbo SPI实现

Dubbo的SPI实现非常类似于原生的JAVA的SPI:它只是提供一种协议,并没有提供相关插件化实施的接口。

熟悉Java SPI的同学都知道Java SPI原生的支持类:ServiceLoader,通过声明接口的实现类,在META-INF/services中注册一个实现类,然后通过ServiceLoader去生成一个接口实例,当更换插件的时候只需要把自己实现的插件替换到META-INF/services中即可。

Java SPI示例

1、定义一个接口 com.bytebeats.demo.spi.service.HelloService, 如下:

public interface HelloService {

    String sayHello(String msg);
}

2、接口实现类
HelloService 接口的实现类有两个:com.bytebeats.demo.spi.service.impl.DefaultHelloServicecom.bytebeats.demo.spi.service.impl.CustomHelloService

3、注册
在resources 目录下创建META-INF/services/interface 文件,maven 项目结构如下:

| - demo
    | - src
        | - main
            | - java
                | - com.bytebeats.demo.spi.service
                    | - HelloService.java
        | - resources
            | - META-INF
                    | - com.bytebeats.demo.spi.service.HelloService

com.bytebeats.demo.spi.service.HelloService文件内容为:

com.bytebeats.demo.spi.service.impl.DefaultHelloService
com.bytebeats.demo.spi.service.impl.CustomHelloService

4、使用

ServiceLoader<HelloService> helloServiceLoader=ServiceLoader.load(HelloService.class);
for(HelloService service : helloServiceLoader){
    service.sayHello("ricky");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容