Модули Java — модуль сервисного интерфейса

Опубликовано: 18 Февраля, 2023

Интерфейс поставщика услуг, функция Java 6, позволяет находить и загружать реализации, соответствующие указанному интерфейсу. В этой статье мы представим компоненты Java SPI и продемонстрируем, как использовать их в реальном сценарии. известный набор классов программирования и интерфейсов, которые предоставляют пользователям доступ к определенной функции или функциям приложения. Приложения теперь более расширяемы благодаря внедрению интерфейса поставщика услуг. Это дает нам возможность улучшить определенные функции продукта без изменения основного приложения. Все, что нам нужно сделать, это подключить новую реализацию сервиса, соответствующую установленным требованиям. Программа загрузит новую производительность и будет использовать ее посредством протокола SPI.

Давайте сначала разберемся с некоторыми терминами

  • Интерфейс поставщика услуг: Интерфейс поставщика услуг называется SPI. Это подмножество всего, что может быть специфичным для API в обстоятельствах, когда библиотека предлагает классы, которые вызывает приложение (или библиотека API) и которые обычно изменяют то, что приложение может делать.
  • Поставщик услуг. Конкретная реализация службы также называется «поставщиком». Поместив файл конфигурации провайдера в каталог ресурсов META-INF/services, его можно найти. Он должен быть доступен через classpath приложения.
  • ServiceLoader: класс, который реализует известный интерфейс или подклассы, он называется поставщиком услуг (или просто поставщиком). По выбору приложения ServiceLoader является объектом, который находит и загружает поставщиков услуг, развернутых в среде выполнения.

Особое применение SPI. В поставщике услуг присутствует один или несколько конкретных классов, которые реализуют или расширяют тип службы. Файл конфигурации поставщика, который мы размещаем в каталоге ресурсов META-INF/services, позволяет нам настраивать и идентифицировать поставщика услуг. Полное имя SPI содержится как в имени файла, так и в его содержимом, которое является именем реализации SPI. Поставщик услуг устанавливается с использованием расширений, JAR-файла, который добавляется в путь к классам приложения, путь к классам для расширений Java или пользовательский путь к классам. Теперь давайте посмотрим на пример.

Пример

В этом примере мы реализуем модуль сервисного интерфейса на java, используя классический библиотечный модуль. эта реализация программы будет иметь доступ к методу getBook().

XML




<!-- We"re including all the 
     dependencies here in this program -->
<dependency>
  <groupId>org.library</groupId>
  <artifactId>library-service-provider</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

Затем мы создадим класс, который будет реализовывать библиотеку SPI.

Java




package org.library;
  
// Inheriting the class
public class ClassicsLibrary implements Library {
  
    public static final String Classic_Library
        = "Classic_Example";
    private final Map<String, Book> books;
  
    // ClassicsLibrary() method declaration
    public ClassicsLibrary()
    {
        books = new TreeMap<>();
        Book Example_1
            = new Book("It"s 2022", "Mr. Sinha", "Des");
        Book Example_2 = new Book("It"s EG2 book Name",
                                  "Mis Sinha", "Des");
  
        books.put("It"s 2022", Example_1);
        books.put("It"s EG2 book Name", Example_2);
    }
  
    @Override public String getCategory()
    {
        return Classic_Library;
    }
  
    @Override public Book getBook(String name)
    {
        return books.get(name);
    }
}

Должно быть очевидно, как использовать Java SPI для разработки легко расширяемых или заменяющих модулей теперь, когда мы исследовали этот механизм с помощью ряда заявленных шагов. Хотя в нашем примере для демонстрации возможности подключения к другим внешним API-интерфейсам использовалась служба обменных курсов Yahoo, производственным системам не нужно полагаться на сторонние API-интерфейсы для разработки фантастических приложений SPI.