Статьи

Основы Spring Framework: что такое инверсия контроля?

Разработчики, начиная с Spring Framework, часто путают терминологию, в частности, зависимости, внедрение зависимостей и инверсию управления. В этой статье мы познакомим вас с концепцией инверсии управления.

Что вы узнаете

  • Что такое инверсия контроля?
  • Каковы некоторые примеры инверсии контроля?
  • Как Spring Framework реализует инверсию управления?
  • Почему важна инверсия контроля и каковы ее преимущества?

Что такое инверсия контроля?

Подход-1

Посмотрите на следующую реализацию ComplexAlgorithmImpl:

public class ComplexAlgorithmImpl {
BubbleSortAlgorithm bubbleSortAlgorithm = new BubbleSortAlgorithm();
//...
}

Одна из многочисленных вещей, которая ComplexAlgorithmImplделает сортировку. Он создает экземпляр BubbleSortAlgorithmнепосредственно в своем коде.

Подход-2

Теперь посмотрите на эту реализацию для изменения:

public interface SortAlgorithm {
public int[] sort(int[] numbers);
}

@Component
public class ComplexAlgorithmImpl {
@AutoWired
private SortAlgorithm sortAlgorithm;
//...
}

ComplexAlgorithmImplздесь использует SortAlgorithmинтерфейс. Он также предоставляет конструктор или метод установки, где вы можете установить SortAlgorithmэкземпляр в него. Пользователь сообщает ComplexAlgorithmImpl, какой алгоритм сортировки использовать.

Сравнение подхода-1 и подхода-2

Подход-1

  • ComplexAlgorithmImplможно использовать только BubbleSortAlgorithm; в тесной связи .
  • Если нам нужно перейти ComplexAlgorithmImplна использование быстрой сортировки, соответствующий код должен быть полностью изменен.
  • Контроль над BubbleSortAlgorithmзависимостью с ComplexAlgorithmImplклассом.

Подход-2

  • ComplexAlgorithmImplоткрыт для использования любой реализации SortAlgorithm, он слабо связан .
  • Нам нужно только изменить параметр, который мы передаем конструктору или установщику ComplexAlgorithmImpl.
  • Контроль над SortAlgorithmзависимостью осуществляется пользователем ComplexAlgorithmImpl.

Инверсия контроля при игре!

В подходе-1 ComplexAlgorithmImplпривязан к определенному алгоритму сортировки.

В «Подходе-2» говорится: дайте мне любой алгоритм сортировки, и я буду работать с ним.

Это инверсия контроля .

Вместо того, чтобы создавать свои собственные зависимости, класс объявляет свои зависимости. Элемент управления теперь переходит от класса к пользователю класса, чтобы обеспечить зависимость.

Почему инверсия контроля важна?

После того как вы напишите код с помощью Inversion of Control, вы сможете использовать такие среды, как Spring, для завершения внедрения зависимостей и подключения bean-компонентов и зависимостей.

Преимущества инверсии контроля

  • Инверсия контроля делает ваш код слабо связанным
  • Инверсия управления также облегчает программисту написание эффективных модульных тестов

Наконец, не забудьте проверить видео ниже на IoC:

информация об изображении

Резюме

В этой статье мы говорили об инверсии управления. Вместо того чтобы класс создает экземпляр собственной зависимости, он оставляет его пользователю класса для передачи и делает код слабо связанным.

Надеюсь, вы чему-то научились! Дайте нам знать, что вы думаете в комментариях ниже.