Что такое SPI (Интерфейс поставщика услуг)?

191
29 июня 2022, 07:10

Разбирал документацию Spring, нашёл там термин SPI. Что он означает и какое у него отличие от API? Очень желательно с примерами на Java.

Answer 1

Ну кратко эту штуку описать с примерами невозможно. На Хабре есть хорошая и вполне понятная статья на эту тему.

Если в двух словах попытаться объяснить принцип, то с помощью SPI можно писать расширяемые программы. Если очень-очень грубо и упрощённо, то вы можете запилить интерфейс в одном джарнике (возможно с дефолтной реализацией, но можно и без). А реализацию в другом джарнике.

Вы так к базе подключаетесь. У вас в Java SE есть интерфейс java.sql.Driver, который лежит в своём джарнике. Вы в classpath добавляете реальный драйвер, отдельный джарник, который вы скачали из интернета. И, о чудо, благодаря SPI, джава сама находит в этом совершенно левом джарнике имплементацию для java.sql.Driver.

А всё почему. А всё потому, что, например, в джарнике sqlite-jdbc-3.21.0.jar (это драйвер из инета) есть каталог META-INF.services, а в нём файл java.sql.Driver (название файла, как не трудно догадаться совпадает с именем интерфейса, который тут кто-то собрался реализовывать). А в этом файле есть строка org.sqlite.JDBC. И действительно, если открыть в этом джарнике файл /org/sqlite/JDBC.java, то мы увидим такое:

public class JDBC implements Driver {
...

Таким образом, благодаря SPI возможна ситуация, что где-то в недрах java.sql лежит интерфейс Driver. Совершенно другие люди, живущие совсем в других местах, написали свой джарник с реализацией этого интерфейса. А мы смогли эту реализацию подложить под этот интерфес, просто поместив джарник с драйвером в classpath.

Не чудо ли?!

READ ALSO
маршрут для робота

маршрут для робота

я делаю игру на java в виде 2д бродилки с видом сверху и также в моей игре есть робот надо запрограммировать робота так чтобы он обходил все преграды...

220
Существует два абзаца, требуется сравнить, вывести список одинаковых слов после сравнения и предложения задом наперед [закрыт]

Существует два абзаца, требуется сравнить, вывести список одинаковых слов после сравнения и предложения задом наперед [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

137
Не вставляется картина в background

Не вставляется картина в background

Проблема с установкой фонового изображения в блок

249