我是靠谱客的博主 寒冷大碗,最近开发中收集的这篇文章主要介绍Dubbo系列之自定义SPI协议拓展点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们在上一节讲到了JDK的SPI机制,大概了解了其实现原理

如果有童鞋没有看过JDK的SPI或者不理解的,可以先参考一下:

JDK系列之SPI机制_codain的博客-CSDN博客JDK系列之SPI机制https://blog.csdn.net/qq_38377525/article/details/122993691

Dubbo中其实并没有直接使用JDK内置的SPI机制,只是利用了其思想,根据实际的业务场景做了一定的优化和调整,Dubbo的所有SPI相关逻辑都被封装在了ExtensionLoader类中,使用此类我们就可以加载指定的实现类了

Dubbo的SPI拓展有两个规则:

1、和JDK内置的SPI一样,都需要在resources下创建目录,只不过Dubbo要求目录是:META-INF/dubbo、META-INF/dubbo/internal、META-INF/services,在对应的目录下创建接口的全路径文件,Dubbo会默认从这三个目录去扫描并加载相应的拓展点

2、文件内容不一样,看过JDK的SPI都知道,JDK的文件内容是类的路径,而Dubbo的SPI是一种key=value形式的,key是一个字符串,Value是具体的实现类路径,加载逻辑一样


其实dubbo已经实现了大多数的拓展点了,查看dubbo的jar包其实就能看到,如下图:

 

接下来我们来实操玩一下,还是以JDK的SPI的例子继续拓展,这样可以看出Dubbo较比JDK的SPI有什么区别和做了哪些优化:

1、在Dubbo工程里面,创建一个接口类Driver

@SPI
public interface Driver{
    String connect();
}

2、实现这个Driver接口类

public class MysqlDriver implements Driver{
    @Override
    public String connect(){
        return "MySQL驱动初始化,加载连接数据库!";
    }
}

3、在resources/META-INF/dubbo目录下创建一个@SPI修饰的接口类路径的文件

文件名:com.cb.dubbo.spi.Driver

文件配置:mysqlDriver=com.cb.dubbo.spi.impl.MysqlDriver

4、创建一个main方法,来验证是否拓展成功,如果输出是下面代码中的输入,即为成功

public class SpiTest{
    public static void main(String[] args){
        ExtensionLoader<Driver> extensionLoader=ExtensionLoader.getExtensionLoader(Driver.class);
        //入参是上一个步骤中的key
        Driver driver=extensionLoader.getExtension("mysqlDriver");
        System.out.println(driver.connect());
    }
}
---------------------------------------------------------------------------
输出:MySQL驱动初始化,加载连接数据库!

附上一个在写这个文章很早之前的一个demo样例链接

dubbo-spi: dubbo的spi机制讲解https://gitee.com/IT_CB/dubbo-spi/

最后

以上就是寒冷大碗为你收集整理的Dubbo系列之自定义SPI协议拓展点的全部内容,希望文章能够帮你解决Dubbo系列之自定义SPI协议拓展点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部