Разработчики, начиная с 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:
Резюме
В этой статье мы говорили об инверсии управления. Вместо того чтобы класс создает экземпляр собственной зависимости, он оставляет его пользователю класса для передачи и делает код слабо связанным.
Надеюсь, вы чему-то научились! Дайте нам знать, что вы думаете в комментариях ниже.