Эффективные основы Java — инъекция зависимостей


Отдавайте предпочтение инъекции зависимостей для интеграции ресурсов

Это серия, основанная на понимании тем, связанных с книгой, с акцентом на краткое содержание.

Понимание…

В проектах 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.

Оцените статью
devanswers.ru
Добавить комментарий