Java · Avançado · Inglês · Técnico
ServiceLoader
Mecanismo do JDK para descobrir implementações de uma interface em execução, declaradas em META-INF/services ou no module-info com provides.
Onde usar
Aparece em drivers JDBC, SLF4J e plugins: o código pede ServiceLoader.load(Interface.class) e itera. Evita dependência direta da implementação.
Em código
interface Plugin { String nome(); }
var todos = ServiceLoader.load(Plugin.class);
for (var p : todos) {
System.out.println(p.nome());
}
// META-INF/services/com.exemplo.Plugin:
// com.exemplo.PluginPdfExemplos
The plugins are discovered through ServiceLoader.
Os plugins são descobertos por meio do ServiceLoader.
Nothing was found because the services file is missing.
Nada foi encontrado porque falta o arquivo de services.
Cuidado
A implementação precisa ser registrada e ter construtor público sem argumentos (ou método provider); senão o loader não a encontra e não avisa.
Sinônimos
SPI