У многих API Java (EE) есть контракт, заключающийся в том, что, когда вы помещаете конкретный файл конфигурации / метаданных в папку META-INF
вашего JAR (или стороннего производителя), API автоматически выполняет специфическую для API работу например, сканирование классов, предварительная загрузка определенных классов и / или выполнение определенного кода на основе метаинформации.
Примером, предоставляемым стандартным API Java SE, является ServiceLoader
. Среди прочего, JDBC 4.0-совместимые драйверы реализуют это. Таким образом, просто удалив папку JAR-файла драйвера JDBC, вы автоматически загрузите класс драйвера во время запуска / инициализации приложения Java без необходимости какой-либо ручной строки Class.forName("com.example.Driver")
в вашем коде.
Кроме того, в Java EE 6 предусмотрен API JSF 2.0, который при запуске приложения сканирует все JAR-файлы для файла faces-config.xml
в папке META-INF
. Если он присутствует, он затем будет использовать подсказку для сканирования всего файла JAR на предмет наличия классов, реализующих специфические для JSF аннотации, такие как @ManagedBean
, чтобы они автоматически создавались и настраивались автоматически. Это экономит время на потенциально дорогой работе по сканированию тысяч классов во всех JAR-файлах во всем пути к классам. В более старых версиях этих API конфигурация обычно выполнялась с помощью (подробных) XML-файлов.
В общем, главная цель - избавить разработчика от кода и / или шаблона конфигурации. Папка META-INF
JAR используется для файлов конфигурации / подсказок. Некоторые API действительно также размещают статические файлы / ресурсы для собственного использования. Папка META-INF
также является частью пути к классам, поэтому загрузка этих файлов загрузчиком классов выполняется легко.