Там довольно много документации , поставляемой с классом. Вы ищете дополнительную информацию?
Услуги в Java определяются файлом конфигурации поставщика услуг, включенным в jar-файл службы. Имя этого файла основано на имени интерфейса службы и имеет вид META-INF/services/com.example.CodecFactory
(для использования примера из документации ServiceLoader
) или META-INF/services/java.sql.Driver
(для примера JDB C, который, я думаю, вы using).
Здесь важно понять, что все файлы конфигурации поставщика услуг для конкретной службы имеют одинаковое имя. Это означает, что путь к классам содержит несколько ресурсов с этим именем, по одному на каждого поставщика услуг. Метод ClassLoader.getResources
(обратите внимание, что это getResources
не getResource
) возвращает Enumeration
, который ServiceLoader
может использовать для перебора всех файлов конфигурации и идентификации каждого поставщика.
Каждый файл конфигурации просто содержит имя класса реализации. Например, если вы посмотрите на банку Postgres, которая называется META-INF/services/java.sql.Driver
, в ней будет всего одна строка: org.postgresql.Driver
. ServiceLoader
просто считывает имя класса реализации из файла, затем вызывает Class.forName
с именем класса, а затем newInstance
для создания экземпляра класса реализации, который затем может быть преобразован в java.sql.Driver
или любой другой интерфейс службы. равно.
Если приложению требуется дополнительная информация о каждом поставщике услуг, оно обычно может получить эту информацию через интерфейс службы. Например, интерфейс java.sql.Driver
включает такие методы, как acceptsURL
, getMinorVersion
/ getMajorVersion
, et c. которое приложение может использовать для получения информации о драйверах JDB C.