Java · Essencial · Português · Técnico
injeção de dependência
Técnica em que um objeto recebe de fora as dependências de que precisa, em vez de criá-las. No Spring, o contêiner as entrega pronto.
Onde usar
Aparece em review: 'injete a interface, não instancie com new'. Facilita trocar implementações e testar com dublês.
Em código
interface Relogio { Instant agora(); }
class Pedido {
private final Relogio relogio;
Pedido(Relogio r) { this.relogio = r; }
}
new Pedido(Instant::now); // produção
new Pedido(() -> Instant.EPOCH); // testeExemplos
Com injeção de dependência, o teste passa um relógio falso.
Não instancia o serviço com new, deixa a injeção de dependência cuidar disso.
Cuidado
Não confunda com Service Locator, em que a classe busca ativamente a dependência; na injeção ela apenas declara o que precisa.
Sinônimos
DI, inversão de controle