Что такое внедрение зависимостей?
Проще говоря, внедрение зависимостей (DI) — это метод разработки программного обеспечения, при котором классы или функции не создают свои зависимости, а получают их откуда-то еще. Это основная функциональность, предоставляемая Spring IOC (Inversion of Control).
Внедрение зависимостей обеспечивает слабую связь между классами, то есть классы в основном независимы. Единственное знание, которое класс имеет о другом классе, — это то, что другой класс предоставил через свой интерфейс.
Существует два типа внедрения зависимостей:
· Внедрение зависимостей сеттера
· Внедрение зависимостей конструктора
Внедрение зависимостей сеттера:
Setter Injection — это более простой из двух методов внедрения зависимостей. При этом внедрение зависимостей будет внедряться с помощью методов установки и/или получения.
Внедрение зависимостей конструктора:
При внедрении конструктора внедрение зависимостей будет внедряться с помощью конструкторов.
Обязанности внедрения зависимостей:
· Создает объекты
· Знает, какие классы требуют эти объекты
· Предоставьте этим классам все эти объекты
Что такое инверсия управления?
Контейнер Inversion of Control (IOC) является ядром Spring Framework. Он создает объекты, настраивает и собирает их зависимости, управляет всем их жизненным циклом. Контейнер использует внедрение зависимостей (DI) для управления компонентами, составляющими приложение. Он получает информацию об объектах из файла конфигурации ( XML ), кода Java, аннотаций Java или класса Java POJO. Эти объекты называются Beans. Поскольку управление объектами Java и их жизненным циклом не осуществляется разработчиками, отсюда и название Инверсия управления.
Особенности инверсии управления:
· Создание объектов
· Управление объектами
· Помощь в настройке наших объектов
· Управление зависимостями
Разница между IOC и внедрением зависимостей:
· IOC — это принцип проектирования, в котором поток управления программы инвертируется, а внедрение зависимостей — это один из подтипов принципа IOC.
· IOC — это термин, который реализуется с помощью локатора сервисов нескольких шаблонов проектирования, событий, делегатов и внедрения зависимостей, в то время как внедрение зависимостей — это шаблон проектирования, который может быть достигнут с помощью внедрения конструктора и установщика.
· Аспектно-ориентированное программирование является одним из способов реализации IOC, но при внедрении зависимостей в случае изменения бизнес-требований изменение кода не требуется.
Преимущества:
· Помогает включить слабую связь.
· Облегчает модульное тестирование.
· Расширение приложения становится проще.
· Позволяет коду быть более пригодным для повторного использования, тестируемым и читабельным.
· Позволяет параллельную или независимую разработку.
· Уменьшить сложность модуля.
· Увеличение возможности повторного использования модуля.
Спасибо !