【发布时间】:2021-09-14 04:00:23
【问题描述】:
我最近了解了Java SPI,我认为只有第三方库实现接口才有用,比如slf4j和jdbc [即最有可能是开源库]。如果应用程序是允许最终用户创建某事物的自定义实现的产品,它也可能很有用。
但是对于在公司开发软件,我们只向客户端公开API,并且最终客户端无权自定义任何实现,是否有任何理由使用Java SPI实现接口?
例如,假设我正在开发一个支付系统,它直接连接到不同的银行系统 [e.g. Morgan Stanley, Bank Of China, Deutsche Bank...],但是每个系统肯定会有不同的 API,也许我们的服务器需要以不同的方式处理请求和响应。因此我们必须创建一个API来封装这些信息,以便其他开发者调用这些服务,不需要关心不同银行系统之间的差异。
public interface PaymentInterface {
String bankName();
boolean pay(Customer customer, BigDecimal amount);
}
在这种情况下,我可以在同一个 Jar 中创建一个直接实现接口的方法,然后创建一个静态工厂方法,用于动态选择不同的 PaymentInterface。那就去吧。
当然,我们可以创建一个SPI,并定义META-INF/service xxx文件来指定我们在XXX和YYY中实现SPI。但是当人们无法预见未来的 SPI 实现将建立在外部 jar 上,但在同一个 jar 中。有什么理由使用 SPI?
让我重新表述一下我的问题,
程序员/公司很少使用 Java SPI 吗?除非你在做开源项目,比如
spring、dubbo、slf4j?
【问题讨论】:
标签: java api service-provider