栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

DubboSPI机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DubboSPI机制

1、JavaSPI机制的缺点

Java SPI 在查找扩展实现类的时候遍历 SPI 的配置文件并且将实现类全部实例化,假设一个实现类初始化过程比较消耗资源且耗时,但是你的代码里面又用不上它,这就产生了资源的浪费。

所以说 Java SPI 无法按需加载实现类。

2、DubboSPI

鉴于JavaSPI存在的缺点,Dubbo 就自己实现了一个 SPI。让我们想一下按需加载的话首先你得给个名字,通过名字去文件里面找到对应的实现类全限定名然后加载实例化即可。

Dubbo 就是这样设计的,配置文件里面存放的是键值对。

并且 Dubbo SPI 除了可以按需加载实现类之外,增加了 IOC 和 AOP 的特性,还有个自适应扩展机制。

我们先来看一下 Dubbo 对配置文件目录的约定,不同于 Java SPI ,Dubbo 分为了三类目录。

  • meta-INF/services/ 目录:该目录下的 SPI 配置文件是为了用来兼容 Java SPI 。

  • meta-INF/dubbo/ 目录:该目录存放用户自定义的 SPI 配置文件。

  • meta-INF/dubbo/internal/ 目录:该目录存放 Dubbo 内部使用的 SPI 配置文件。

3、Dubbo简单示例

引入dubbo依赖


    org.apache.dubbo
    dubbo-spring-boot-starter
    2.7.3

自定义实现类

public class MyProcol implements Protocol {
    @Override
    public int getDefaultPort() {
        return 8888;
    }

    @Override
    public  Exporter export(Invoker invoker) throws RpcException {
        return null;
    }

    @Override
    public  Invoker refer(Class aClass, URL url) throws RpcException {
        return null;
    }

    @Override
    public void destroy() {

    }
}

在resources目录下新建meta-INF/dubbo/internal文件夹,文件夹下新建org.apache.dubbo.rpc.Protocol文件
文件内容为:

myprotocol=com.tianmu.mytest.service.impl.MyProcol

测试

public class DubboDemo {
    public static void main(String[] args) {
        Protocol protocol= ExtensionLoader.getExtensionLoader(Protocol.class).getExtension("myprotocol");
        System.out.println(protocol.getDefaultPort());
    }
}

输出

15:43:55.400 [main] INFO org.apache.dubbo.common.logger.LoggerFactory - using logger: org.apache.dubbo.common.logger.slf4j.Slf4jLoggerAdapter
8888
4、Dubbo源码分析
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/683238.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号