Разбирал документацию Spring
, нашёл там термин SPI. Что он означает и какое у него отличие от API? Очень желательно с примерами на Java.
Ну кратко эту штуку описать с примерами невозможно. На Хабре есть хорошая и вполне понятная статья на эту тему.
Если в двух словах попытаться объяснить принцип, то с помощью 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.
Не чудо ли?!
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
я делаю игру на java в виде 2д бродилки с видом сверху и также в моей игре есть робот надо запрограммировать робота так чтобы он обходил все преграды...
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение