3 ответа
Он предназначен для хранения файлов конфигурации поставщика услуг.
Поставщик услуг представляет собой реализацию интерфейса поставщика услуг, упакованного как JAR.
Загрузчик служб обнаруживает и загружает все реализации, объявленные в файле конфигурации поставщика услуг.
Файл конфигурации - это файл, который называется полным именем интерфейса, а его содержимое - список полных имен реализаций.
Ниже приведен пример файла конфигурации поставщика для javax.servlet.ServletContainerInitializer, который используется Servlet 3.0 при запуске веб-приложения.
org.apache.jasper.servlet.JasperInitializer
org.springframework.web.SpringServletContainerInitializer
В этом примере
- Tomcat - сервисный загрузчик;
- javax.servlet.ServletContainerInitializer - это интерфейс поставщика услуг
- файл с именем javax.servlet.ServletContainerInitializer является файлом конфигурации поставщика услуг;
- org.apache.jasper.servlet.JasperInitializer и org.springframework.web.SpringServletContainerInitializer являются поставщиками услуг.
Когда tomcat запускает веб-приложение, звоните обоим
onStartup(java.util.Set<java.lang.Class<?>> types, ServletContext context)
методы в классах JasperInitializer и SpringServletContainerInitializer
До Java 9 ServiceLoader находит реализации для Сервиса из файла в META-INF / services, у которого есть полное имя, такое же, как у интерфейса Сервиса. Он содержит список полных имен реализаций.
Начиная с Java 9, у него есть модули, а у модулей есть дескрипторы модулей. Эти «модули» могут определять сервисы и их реализацию, которые может загружать ServiceLoader.