Что такое внедрение зависимостей?

Проще говоря, внедрение зависимостей (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, но при внедрении зависимостей в случае изменения бизнес-требований изменение кода не требуется.

Преимущества:

· Помогает включить слабую связь.

· Облегчает модульное тестирование.

· Расширение приложения становится проще.

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

· Позволяет параллельную или независимую разработку.

· Уменьшить сложность модуля.

· Увеличение возможности повторного использования модуля.

Спасибо !