JavaSPI在分布式项目的简单示例

JavaSPI在分布式项目的简单示例

在分布式项目中都会有一个common的公共资源项目,在此项目中有一个通用的方法及可供调用的接口类,这些接口类可以供其他的项目实现。此时当有一个项目想要调用一部分实现该类的方法的时候,就可以使用SPI机制。springboot中加载自动配置类的时候就是使用的该机制。

1、首先创建一个公共的项目,并创建接口类及抽象方法。

public interface PayService {
    public void pay();
}

2、创建一些项目,引用common项目,然后创建PayService的实现类。

public class AliPay implements PayService {
    @Override
    public void pay() {
        System.out.println("支付宝支付");
    }
}
public class WxPay implements PayService {
    @Override
    public void pay() {
        System.out.println("微信支付");
    }
}

3、创建一个测试项目,只调用AliPay中的pay方法。
(1)在测试项目中添加common和AliPay所在项目的依赖;
在这里插入图片描述

(2)创建一个测试类,使用ServiceLoader加载抽象类,返回的ServiceLoader是Iterable类型的。在这里插入图片描述

public class MainTest {
    public static void main(String[] args) {
        ServiceLoader<PayService> serviceLoader = ServiceLoader.load(PayService.class);
        for (PayService payService : serviceLoader) {
            payService.pay();
        }
    }
}

(3)此时还是发现调用不到AliPay中的方法,因为ServiceLoader会去查找所有依赖的项目中classPath下的“META/services”文件夹下的与上述接口的全限定名一致的文件,在这个文件中写入接口的实现类的全限定名:
在这里插入图片描述

com.test.AliPay

此时再去执行上述方法就可以直接调用到了。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值