Что такое МОК ДИ?
привет Дорогие друзья, сегодня я расскажу вам об инверсии управления и внедрении зависимостей.
Прочитал много информации в процессе понимания
Эта статья разделена на следующие три части
- Что такое IOC и DI
- Преимущества IOC и DI
- Как использовать IOC и DI в java
Что такое IOC и DI
Инверсия контроля(Инверсия управления, сокращенноIoC),ДаОбъектно-ориентированное программированиеПринцип проектирования вСвязь. Самый распространенный способ называетсявнедрение зависимости(Внедрение зависимостей, называемоеDI), есть еще один способ, называемый «поиск зависимостей» (Dependency Lookup). Посредством инверсии управления при создании объекта внешний объект, управляющий всеми объектами в системе, передает (внедряет) ссылки на объекты, от которых он зависит.
Что именно инверсия управления обращена вспять, чем она управляется, что вводится путем внедрения зависимостей и от чего она зависит?
Прежде всего, давайте забудем об инверсии управления и посмотрим на внедрение зависимостей, потому что в 2004 году дядя Мартин предложил более понятное объяснение термина инверсия управления, называемое внедрением зависимостей.Только поняв внедрение зависимостей, мы можем лучше понять инверсию управления. Ниже приведен пример вызова внедрения зависимостей.
Каждое поле ввода текста имеет средство проверки текста, и каждый раз при инициализации поля выбора текста требуется средство проверки.
public class TextInput {
private SpellCheck spellCheck;
public TextInput() {
spellCheck=new SpellCheck();
}
}
public class TextInput {
private SpellCheck spellCheck;
public TextInput(SpellCheck spellCheck) {
this.spellCheck=spellCheck;
}
}
Глядя на приведенные выше два разных фрагмента кода, мы можем обнаружить, что существенное различие между ними заключается в том, что объект SpellCheck создается в разное время и в разных местах.В приведенном ниже коде средство проверки текста передается в текстовое поле в качестве параметра в способ построения текстового поля. То есть можно понять, что объект SpellCheck внедряется в класс TextInput. Благодаря этому примеру вы, вероятно, сможете понять поднятые выше вопросы: что такое зависимость, что такое внедрение, средство проверки зависимостей текстового поля и помещение зависимого класса в качестве формального параметра в зависимый класс становится внедрением зависимостей.
Следующим шагом является инверсия управления.Студенты, которые писали java web, должны были использовать аннотацию @Autowired, с помощью которой объект класса может быть сгенерирован напрямую без явного создания нового. Контроль — это когда мы можем контролировать, когда создается объект, а инверсия власти — это когда создание объекта забирается через IOC-контейнер.
Поняв приведенные выше концепции, вы фактически знаете, что инверсия управления — это веб-приложение внедрения зависимостей, а контейнер используется для управления внедряемыми классами. Пользователям удобно многократно создавать зависимые классы вне класса. Таким образом, важно глубокое понимание внедрения зависимостей, а инверсия управления — это применение DI. Как говорит Мартин: «Какие аспекты контроля были изменены на противоположные?» Вопрос. Он пришел к выводу, что приобретение зависимого объекта было обратным,
Давайте поговорим о преимуществах внедрения зависимостей и нескольких методах внедрения зависимостей.
Давайте разберемся в его преимуществах через код
public class Car {
private enginer enginer;
private wheel wheel;
public Car() {
enginer = new enginer();
wheel = new wheel();
}
}
public class Car {
private enginer enginer;
private wheel wheel;
public Car(enginer enginer, wheel wheel) {
this.enginer = enginer;
this.wheel = wheel;
}
}
Автомобиль - это сложный объект, который включает в себя множество узлов, двигателей, колес и т. д. Все виды автомобилей всегда одинаковы, размер колес, когда мы хотим создать два разных автомобиля, но у них есть только колеса Когда размер отличается, первое решение состоит в том, чтобы создать новый класс автомобиля и создать новый объект колеса в конструкторе, во втором решении вам нужно только создать объект колеса снаружи и передать его в класс автомобиля. Уменьшен новый класс автомобилей. То есть связь между классами уменьшается, объекты получают свои зависимости во время выполнения, а не во время компиляции (когда машина собирается). Так что теперь мы можем поменять колесо в любое время. Здесь зависимости (колеса) могут быть внедрены в машину во время выполнения. В то же время это очень полезный метод тестирования, поскольку он позволяет имитировать или удалять зависимости.
Из вышесказанного вы должны понимать, что есть несколько способов добиться внедрения зависимостей помимо конструкторов?
Внедрение зависимостей реализовано следующим образом:
- Основанный на интерфейсе. Реализует специальные интерфейсы для внешних контейнеров для внедрения объектов зависимых типов.
- На основе установленного метода. Реализуйте общедоступные методы набора для определенных свойств, чтобы разрешить вызовы внешних контейнеров для передачи в объекты зависимых типов.
- На основе конструктора. Реализуйте конструктор с определенными параметрами и передайте объект зависимого типа при создании нового объекта.
- На основе аннотаций. на основеАннотация на Java, добавьте аннотации, такие как «@Autowired» перед частной переменной, вы можете разрешить внешнему контейнеру передавать соответствующий объект без явного определения трех вышеуказанных кодов. Это решение эквивалентно определению общедоступного метода set, но поскольку реального метода set нет, оно не будет предоставлять интерфейсы, которые не должны предоставляться для реализации внедрения зависимостей (поскольку метод set позволяет контейнеру получить доступ только для внедрения и не хочет доступа к другому объекту, который зависит от этого класса).
в порядке. Здесь представлены Ioc и di. Если есть какая-либо ошибка выше, пожалуйста, свяжитесь со мной вовремя и сообщите об этом, большое спасибо.
использованная литература
Действующее третье издание Java