A palavra-chave provides em Java foi introduzida no Java 9 como parte do Java Platform Module System (JPMS), também conhecido como Project Jigsaw. Ela é usada para especificar quais serviços um módulo oferece para outros módulos.
O que faz a palavra-chave provides?
- provides é usada em um módulo para declarar que ele fornece uma implementação de um serviço específico.
- Isso permite que o módulo declare quais serviços ele está disponibilizando para outros módulos através da interface ServiceLoader.
Sintaxe básica:
Dentro do arquivo module-info.java, você usa provides para indicar a implementação de um serviço.
Exemplo:
Vamos supor que temos uma interface de serviço chamada Servico e uma classe que implementa essa interface chamada ServicoImpl. Você pode declarar no módulo que ServicoImpl é uma implementação do serviço Servico usando provides.
module com.exemplo.modulo {
provides com.exemplo.Servico with com.exemplo.ServicoImpl;
}
Nesse exemplo:
- provides com.exemplo.Servico: Declara que o módulo oferece um serviço do tipo Servico.
- with com.exemplo.ServicoImpl: Especifica que a implementação desse serviço é a classe ServicoImpl.
Posts recentes
Uso em contexto:
Definição de Interface de Serviço:
package com.exemplo;
public interface Servico {
void executar();
}
Implementação do Serviço:
package com.exemplo;
public class ServicoImpl implements Servico {
@Override
public void executar() {
System.out.println("Serviço executado!");
}
}
Declaração no Módulo:
module com.exemplo.modulo {
provides com.exemplo.Servico with com.exemplo.ServicoImpl;
}
Como usar:
- Outros módulos podem usar a ServiceLoader para carregar a implementação fornecida.
Exemplo de uso do ServiceLoader:
import java.util.ServiceLoader;
import com.exemplo.Servico;
public class Main {
public static void main(String[] args) {
ServiceLoader<Servico> loader = ServiceLoader.load(Servico.class);
for (Servico servico : loader) {
servico.executar();
}
}
}
Quando usar provides:
- Use provides quando você estiver criando um módulo que fornece implementações de serviços que outros módulos precisam usar.
- Isso é particularmente útil em arquiteturas baseadas em plugins ou quando você deseja fornecer uma implementação concreta de um serviço para outros módulos.
O sistema de módulos de Java ajuda a modularizar e encapsular serviços, promovendo uma arquitetura mais limpa e modular.