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() {
}
}
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();
}
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;
}
}
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)
Bom demais, acho esse entendimento uma ótima base pra muuuiitttaaa coisa, principalmente para entender o Spring
👏🏼👏🏼👏🏼
Excelente artigo e exemplos utilizados! Parabéns! :)