Разница между инверсией контроля и инъекцией зависимости
Концепция IoC и DI очень запутала меня, поэтому я прочитал множество мнений и сообщений разных людей и, наконец, пришел к выводу. Итак, насколько я понимаю, эти темы...
Инверсия управления - это методика в Java для создания слабосвязанных и более легко обслуживаемых приложений, а внедрение зависимостей - один из способов достижения этой концепции (методики).
Инверсия зависимостей внедрения контейнера управления во время выполнения от классов Java для создания слабосвязанного приложения.
Это правда? поправь меня если я не прав...
6 ответов
Это шаблоны для достижения слабой связи в Java-программировании.
DI (Dependency Injection):
Внедрение зависимостей - это шаблон, используемый для создания экземпляров объектов, на которые полагаются другие объекты, не зная во время компиляции, какой класс будет использоваться для предоставления этой функциональности или просто способ внедрения свойств в объект называется инъекцией зависимости.
У нас есть три типа инъекций зависимости
- Конструктор Инъекция
- Сеттер / Геттер Инъекция
- Интерфейс впрыска
Spring будет поддерживать только Constructor Injection и Setter/Getter Injection.
МОК (инверсия контроля):
Предоставление контроля контейнеру для создания и внедрения экземпляров объектов, от которых зависит ваше приложение, означает, что вместо того, чтобы создавать объект с помощью new
оператор, пусть контейнер сделает это за вас. Инверсия управления основана на внедрении зависимостей, поскольку для активации компонентов, обеспечивающих определенные функциональные возможности, необходим механизм.
Таким образом, две концепции работают вместе, что позволяет писать гораздо более гибкий, многократно используемый и инкапсулированный код. Как таковые, они являются важными концепциями при разработке объектно-ориентированных решений.
Пример для внедрения зависимости
Ранее мы пишем такой код
Public MyClass{
DependentClass dependentObject
/*
At somewhere in our code we need to instantiate
the object with new operator inorder to use it or perform some method.
*/
dependentObject= new DependentClass();
dependentObject.someMethod();
}
С внедрением Dependency, инжектор зависимостей снимает для нас экземпляр
Public MyClass{
/* Dependency injector will instantiate object*/
DependentClass dependentObject
/*
At somewhere in our code we perform some method.
The process of instantiation will be handled by the dependency injector
*/
dependentObject.someMethod();
}
Вышеупомянутый процесс передачи управления некоторому другому (например, контейнеру) для создания экземпляра и инъекции можно назвать инверсией управления.
Вы можете прочитать больше о внедрении зависимостей и IOC в моем ответе:- Здесь вы можете найти преимущества и применение этих концепций.
IoC - это общий термин, означающий, что приложение не вызывает методы в платформе, а платформа вызывает реализации, предоставляемые приложением.
DI - это форма IoC, где реализации передаются в объект посредством поиска конструкторов / установщиков / служб, от которого объект будет "зависеть" для правильного поведения.
Инверсия управления означает, что программа передает управление кому-то другому, кто будет управлять потоком IOC (инверсия управления) - это общий родительский термин, в то время как DI (внедрение зависимости) является подмножеством IOC. МОК - это концепция, в которой поток приложения перевернут. Контроль над логикой, которая не является частью этой сущности, берется кем-то другим. DI предоставляет объекты, которые нужны объекту. Таким образом, вместо того, чтобы построить зависимости, они вводятся. Самым большим преимуществом, достигнутым с помощью вышеуказанного подхода, является "развязка", мы можем вызывать объект и передавать любой объект, сохраняя объекты независимыми, улучшая возможность повторного использования и обслуживания.
МОК означает "Инверсия контроля". Он будет работать на основе принципа IOC, это означает взаимодействие объектов и управление объектами жизненного цикла. Сотрудничество означает, что объекты группируются в одном месте. Мы можем сотрудничать с объектами двумя способами, которые они называют Dependency Pull и Dependency Injection . DP разделяется на два способа (извлечение зависимостей и контекстное извлечение зависимостей), а DI также делится на два способа (инъекция сеттера и инъекция конструктора). IOC поддерживает оба способа, но основное намерение работы с пружинной рамой состоит в том, что наши компоненты будут полностью свободными в сочетании. Если мы будем использовать метод Dependency Pull, наш класс компонентов будет тесно связан с другим классом, даже если он является частью работы с рамой пружины. Затем рекомендуется перейти к Dependency Injection (Setter Injection или Constructor Injection). Нет никакой разницы между IOC и DI. IOC отличается и DI отличается, DI является одной из частей IOC.
Инверсия управления (IoC) относится к стилю программирования, в котором среда или среда выполнения управляют потоком программы. Инверсия контроля означает, что мы меняем контроль с нормального пути. Он работает по принципу инверсии зависимости.
DI - это шаблон проектирования программного обеспечения, который позволяет нам разрабатывать слабосвязанный код. DI - отличный способ уменьшить тесную связь между программными компонентами. DI также позволяет нам лучше управлять будущими изменениями и другими сложностями в нашем программном обеспечении. Цель DI - сделать код поддерживаемым.
Инверсия управления и внедрение зависимостей - это основной шаблон проектирования Spring Framework. Шаблон проектирования IOC и DI также является популярным вопросом интервью на шаблонах проектирования в Java. Как следует из названия, Инверсия шаблона управления Инвертирует ответственность за управление жизненным циклом объекта, например созданием объекта, установкой их зависимости и т. Д. От приложения к платформе, что делает написание приложения Java еще более простым.
Читать подробнее: http://javarevisited.blogspot.com/2012/12/inversion-of-control-dependency-injection-design-pattern-spring-example-tutorial.html