it-swarm.com.ru

Разница между инверсией контроля и инъекцией зависимостей

Концепция IoC и DI очень смутила меня, поэтому я прочитал множество мнений и сообщений разных людей и, наконец, пришел к выводу. Итак, насколько я понимаю, эти темы ...

Инверсия управления - это методика в Java для создания слабосвязанных и более легко обслуживаемых приложений, а внедрение зависимостей - один из способов реализации этой концепции (методики).

Инверсия зависимостей внедрения контейнера управления во время выполнения от классов Java для создания слабосвязанного приложения.

Это правда ? поправь меня если я не прав ...

20
Devendra Anchal

IoC - это общий термин, означающий, что приложение не вызывает методы в платформе, а каркас вызывает реализации, предоставляемые приложением.

DI - это форма IoC, где реализации передаются в объект посредством поиска конструкторов/установщиков/служб, от которого объект будет «зависеть» для правильного поведения.

Ссылка: Инверсия управления против внедрения зависимости

17
NG.

Это шаблоны для достижения слабой связи в Java-программировании.

DI (Внедрение зависимостей):
Внедрение зависимостей - это шаблон, используемый для создания экземпляров объектов , На который полагаются другие объекты, не зная во время компиляции Какой класс будет использоваться для обеспечения этой функциональности или просто способ внедрения свойств в объект называется инъекцией зависимости.

У нас есть три типа инъекций зависимости

  1. Конструктор Инъекция 
  2. Сеттер/Геттер Инъекция 
  3. Интерфейс впрыска

Spring будет поддерживать только Instructor Injection и Setter/Getter Injection. 

IOC (инверсия контроля):
Предоставление контроля контейнеру для создания и внедрения экземпляров объектов, от которых зависит ваше приложение. Это означает, что вместо того, чтобы создавать объект с помощью оператора 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();
}

Вышеупомянутый процесс передачи управления некоторому другому (например, контейнеру) для создания экземпляра и внедрения может быть назван Inversion of Control

Вы можете прочитать больше о внедрении зависимостей и IOC в моем ответе: - Вы можете найти преимущества и применения концепций здесь.

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

11
Samuel J Mathew

Инверсия управления означает, что программа передает управление кому-то другому, кто будет управлять потоком IOC (инверсия управления) - это общий родительский термин, в то время как DI (внедрение зависимости) является подмножеством IOC. IOC - это концепция, в которой поток приложения инвертирован. Контроль над логикой, которая не является частью этой сущности, берется кем-то другим. DI предоставляет объекты, которые нужны объекту. Таким образом, вместо того, чтобы построить зависимости, они вводятся. Самым большим преимуществом, достигнутым вышеупомянутым подходом, является «разделение», мы можем вызывать объект и передавать любой объект, сохраняя объекты независимыми, улучшая возможность повторного использования и обслуживания.

1
Nico

МОК означает «Инверсия контроля». Он будет работать по принципу IOC, это означает взаимодействие объектов и управление объектами жизненного цикла. Сотрудничество означает, что объекты группируются в одном месте. Мы можем сотрудничать с объектами двумя способами, такими как: Dependency Pull и Dependency Injection. DP разделяется на два способа (извлечение зависимостей и контекстное извлечение зависимостей), а DI также делится на два способа (инжекция сеттера и инжектор конструктора). IOC поддерживает оба способа, но основное намерение работы с пружинной рамой состоит в том, что наши компоненты будут работать совершенно свободно coupled . Если мы будем использовать Dependency pull, наш класс компонентов станет тесно связанным с другим классом, хотя и как часть работы с пружинной рамой. Затем рекомендуется перейти к Dependency Injection (Setter Injection или Constructor Injection). Нет разницы между IOC и DI.IOC отличается и DI отличается, DI является одной из частей IOC.

0
user8293791

Инверсия управления и внедрение зависимостей - это основной шаблон проектирования Spring Framework. IOC и шаблон проектирования DI - это также популярный вопрос интервью с шаблоном проектирования в Java. Как следует из названия, инверсия шаблона управления инвертирует ответственность за управление жизненным циклом объекта, например создание объекта, установка их зависимости и т. д. из приложения в среду, что делает написание приложения Java еще более простым. 

Подробнее: http://javarevisited.blogspot.com/2012/12/inversion-of-control-dependency-injection-design-pattern-spring-example-tutorial.html#ixzz4xve86pPN

0
Krishnanunni P V

Инверсия управления (IoC) относится к стилю программирования, в котором среда или среда выполнения управляют потоком программы. Инверсия контроля означает, что мы меняем контроль с нормального пути. Он работает по принципу инверсии зависимости.

DI - это шаблон проектирования программного обеспечения, который позволяет нам разрабатывать слабосвязанный код. DI - отличный способ уменьшить тесную связь между программными компонентами. DI также позволяет нам лучше управлять будущими изменениями и другими сложностями в нашем программном обеспечении. Цель DI - сделать код поддерживаемым.

0
Adi Sembiring