#java #api #service-provider
Вопрос:
Я недавно узнал о Java SPI, и я думаю, что это полезно только для сторонней библиотеки для реализации интерфейса, например slf4j
, и jdbc
[т. Е., скорее всего, библиотека с открытым исходным кодом]. Это также может быть полезно, если приложение является продуктом, в котором оно позволяет конечному пользователю создавать пользовательскую реализацию sth.
Но для разработки программного обеспечения в компании, где мы предоставляем API только клиенту, а конечные клиенты никогда не имеют права настраивать какую-либо реализацию, есть ли какие-либо причины для реализации интерфейса с использованием Java SPI?
Например, допустим, я работаю над платежной системой, где она напрямую подключается к другой банковской системе [например, Morgan Stanley, Bank Of China, Deutsche Bank…], но у каждой системы определенно будет свой API, и, возможно, нашему серверу необходимо по-разному обрабатывать запрос и ответ. Поэтому мы должны создать API для обертывания такой информации, чтобы другому разработчику, вызывающему такие сервисы, не нужно было беспокоиться о разнице между различными банковскими системами.
public interface PaymentInterface {
String bankName();
boolean pay(Customer customer, BigDecimal amount);
}
В таком сценарии я могу в той же банке создать метод, который реализует интерфейс напрямую, а затем создать статический заводской метод для выбора различных интерфейсов платежей на лету. Тогда хорошо идти.
И, конечно, можно создать SPI и определить файл xxx META-INF/service, чтобы указать, что мы реализуем SPI в XXX и YYY. Но когда нельзя предвидеть, что будущая реализация SPI будет построена на внешней jar, но в той же jar. Есть ли какие-либо причины использовать SPI?
Позвольте мне еще раз перефразировать свои вопросы,
редко ли Java SPI используется программистами / компаниями? Если только вы не занимаетесь проектами с открытым исходным кодом, например
spring
dubbo
,slf4j
?