Java Meta-Inf Services

Какова цель служб Meta-INF в Java?

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

Посмотрите на ServiceLoader документы

До Java 9 ServiceLoader находит реализации для Сервиса из файла в META-INF / services, у которого есть полное имя, такое же, как у интерфейса Сервиса. Он содержит список полных имен реализаций.

Начиная с Java 9, у него есть модули, а у модулей есть дескрипторы модулей. Эти «модули» могут определять сервисы и их реализацию, которые может загружать ServiceLoader.

Другие вопросы по тегам