DEV Community

Paula Santana
Paula Santana

Posted on • Edited on

Java Efetivo Essencial - Injeção de Dependência

Dê preferência à injeção de dependência para integrar recursos

Esta é uma série baseada no entendimento de tópicos relacionados ao livro com foco no resumo.

Entendendo...

O que mais temos em projetos Java são classes que acabam dependendo do comportamento de outras classes.
É claro que quando estamos falando do mundo Spring a coisa parece ser mais simples e talvez o livro seja agnóstico ao framework então ele se concentra em como era por vezes na linguagem.
Ele cita duas formas que poderiam ser feitas mas que geraria uma implementação inflexível.

Colocar a dependência de forma estática

public class GeradorDeRelatorioFinanceiro {

    private static final CalculadoraFinanceira
        calculadora = new CalculadoraFinanceira();

    public GeradorDeRelatorioFinanceiro() {
    }
}
Enter fullscreen mode Exit fullscreen mode

Colocar a classe que recebe a dependência como um singleton

public class GeradorDeRelatorioFinanceiro {

    private final CalculadoraFinanceira
        calculadora = new CalculadoraFinanceira();

    private GeradorDeRelatorioFinanceiro() {}

    public static GeradorDeRelatorioFinanceiro INSTANCE =
      new GeradorDeRelatorioFinanceiro();
}
Enter fullscreen mode Exit fullscreen mode

Porquê?

As duas abordagens anteriores não permitem flexibilidade de recebimento da dependência, o que torna o código difícil de manusear e o que dificulta os testes.
Para conseguirmos atuar com dependência de maneira flexível o ideal é recebermos a dependência através do construtor da classe.
Atenção: Usar esse argumento com a Injeção de dependência do Spring não funciona pois conseguimos injetar o objeto mesmo não recebendo ele pelo construtor.

Modo certo

public class GeradorDeRelatorioFinanceiro {

    private final CalculadoraFinanceira calculadora;

    public GeradorDeRelatorioFinanceiro(CalculadoraFinanceira calculadora) {
        this.calculadora = calculadora;
    }
}
Enter fullscreen mode Exit fullscreen mode

Pera

A Injeção de dependência melhora considerávelmente a flexibilidade e a testabilidade, porém sobrecarrega sistemas que possuem muitas dependências. Para essa sobrecarga o ideal é utilizar um framework que faça a Injeção de dependência como por exemplo o Spring.

Top comments (2)

Collapse
 
fabianogoes profile image
Fabiano Góes • e-Programar

Bom demais, acho esse entendimento uma ótima base pra muuuiitttaaa coisa, principalmente para entender o Spring
👏🏼👏🏼👏🏼

Collapse
 
tadeuespindolapalermo profile image
Tadeu Espindola Palermo (CobraDev)

Excelente artigo e exemplos utilizados! Parabéns! :)