Отдавайте предпочтение инъекции зависимостей для интеграции ресурсов
Это серия, основанная на понимании тем, связанных с книгой, с акцентом на краткое содержание.
Понимание…
В проектах Java мы чаще всего имеем дело с классами, которые в конечном итоге зависят от поведения других классов.
Конечно, когда мы говорим о мире Spring, все кажется проще, и, возможно, книга агностична по отношению к фреймворку, поэтому он фокусируется на том, как это иногда было в языке.
Он приводит два способа, которые могут быть реализованы, но приведут к негибкой реализации.
Установите зависимость статически
public class GeradorDeRelatorioFinanceiro {
private static final CalculadoraFinanceira
calculadora = new CalculadoraFinanceira();
public GeradorDeRelatorioFinanceiro() {
}
}
Поместите класс, который получает зависимость, в качестве синглтона
public class GeradorDeRelatorioFinanceiro {
private final CalculadoraFinanceira
calculadora = new CalculadoraFinanceira();
private GeradorDeRelatorioFinanceiro() {}
public static GeradorDeRelatorioFinanceiro INSTANCE =
new GeradorDeRelatorioFinanceiro();
}
Почему?
Предыдущие два подхода не позволяют гибко подходить к получению зависимости, что затрудняет работу с кодом и затрудняет тестирование.
Чтобы иметь возможность гибко работать с зависимостями, идеальным вариантом является получение зависимости через конструктор класса.
Предупреждение: Использование этого аргумента с инъекцией зависимостей Spring не работает, потому что мы можем инъектировать объект, даже если мы не получаем его через конструктор.
Правильный путь
public class GeradorDeRelatorioFinanceiro {
private final CalculadoraFinanceira calculadora;
public GeradorDeRelatorioFinanceiro(CalculadoraFinanceira calculadora) {
this.calculadora = calculadora;
}
}
Пера
Инъекция зависимостей значительно повышает гибкость и тестируемость, но она перегружает системы, имеющие много зависимостей. Для такой перегрузки идеальным вариантом будет использование фреймворка с инъекцией зависимостей, например, Spring.