Что такое внедрение зависимостей? - Знать, как реализовать внедрение зависимостей



Эта статья о том, что такое внедрение зависимостей, представляет собой исчерпывающее руководство по внедрению зависимостей с практической точки зрения в Spring Boot.

В мире, где мы ежедневно работаем с языками программирования, все мы стремимся искать методы и уловки, которые упростят нашу жизнь. Что ж, внедрение зависимостей - это один из таких методов, который направлен на то, чтобы облегчить код разработчика, предоставляя зависимости другого объекта. В этой статье о том, что такое внедрение зависимостей, я помогу вам подробно разобраться в этой технике.

В этой статье будут рассмотрены следующие темы:





Итак, приступим к этой статье.

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

Внедрение зависимостей - это способность объекта предоставлять зависимости другого объекта.



Java выйти из метода

Я почти уверен, что вы, возможно, ничего не поняли из вышеприведенного технического определения. Итак, позвольте мне прояснить для вас путаницу.

Что приходит вам в голову, когда вы слышите термин «зависимость»?

Очевидно, что-то полагается на что-то еще для поддержки, верно?



Что ж, то же самое и в случае программирования.

Зависимость в программировании - это подход, при котором класс использует определенные функции другого класса. Так, например, если вы рассматриваете два класса A и B и говорите, что класс A использует функции класса B, тогда подразумевается, что класс A имеет зависимость от класса B. Теперь, если вы кодируете на Java, вы должны знать это вы должнысоздайте экземпляр класса B до того, как объекты будут использоваться классом A.

Типы классов - Что такое внедрение зависимостей - Edureka

Итак, если мне нужно теперь определить для вас внедрение зависимостей, то процесс создания объекта для какого-либо другого класса и позволить классу напрямую использовать зависимость называется внедрением зависимостей.. В основном он включает три класса:

  • Класс клиента: Это зависимый класс, который зависит от класса обслуживания.

  • Класс обслуживания: Этот класс предоставляет услугу клиентскому классу.

  • Класс инжектора: Этот класс отвечает за внедрение объекта класса обслуживания в класс клиента.

Теперь, когда вы поняли, что такое внедрение зависимостей, позвольте мне рассказать вам о принципе, на котором основано внедрение зависимостей.

Инверсия контроля

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

Если мне нужно объяснить вам попроще, то рассмотрим пример, в котором вы умеете готовить. В соответствии с принципом IoC вы можете инвертировать управление, поэтому вместо того, чтобы готовить еду, вы можете просто заказать ее извне, при этом вы получите еду на пороге. Таким образом, процесс доставки еды к вашему порогу называется инверсией контроля.

Вам не нужно готовить самостоятельно, вместо этого вы можете заказать еду и позволить курьеру доставить еду за вас. Таким образом, вам не нужно заботиться о дополнительных обязанностях, а просто сосредоточиться на основной работе.

Теперь, когда вы знаете принцип внедрения зависимостей, позвольте мне познакомить вас с типами внедрения зависимостей.

Типы внедрения зависимостей

В основном существует три типа внедрения зависимостей:

  • Внедрение конструктора: В этом типе инъекции инжектор предоставляет зависимость через конструктор клиентского класса.

  • Внедрение сеттера / Внедрение свойств: В этом типе внедрения метод инжектора внедряет зависимость в метод установки, предоставляемый клиентом.

  • Внедрение интерфейса: В этом типе инъекции инжектор использует интерфейс для обеспечения зависимости классу клиента. Клиенты должны реализовать интерфейс, который будет предоставлятьметод установкикоторыйпринимает зависимость.

До сих пор я надеюсь, что вы поняли тот факт, что внедрение зависимостей отвечает за создание объектов, понимание того, какие классы требуют этих объектов, и, наконец, предоставление этим классам объектов. Итак, на этой заметке, давайте теперь рассмотрим преимущества внедрения зависимостей.

Преимущества внедрения зависимостей

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

Рассмотрим сценарий, в котором у вас есть класс электронной почты, единственная ответственность которого - заботиться о полученных письмах. Теперь у этого класса будут такие объекты, как «На адрес электронной почты», «С адреса электронной почты», «Тема и тело электронного письма».

Теперь, если компания хочет сохранить текстовые и звуковые сообщения, как вы думаете, сможет ли этот класс сохранить сообщение?

Ну что, нет?

Это потому, что класс электронной почты не может обрабатывать параметры текстовых и звуковых сообщений. В таких случаях вам придется воссоздать класс. Теперь воссоздание класса - довольно громоздкая работа, особенно если вам приходится делать это регулярно. Вместо этого, если вы используете внедрение зависимостей, вы можете изменять объекты во время выполнения. Таким образом, вам не нужно воссоздавать класс, что в дальнейшем поможет вам во многих отношениях.

Итак, если мне нужно суммировать преимущества внедрения зависимостей, то они следующие:

Хорошо, теперь, когда вы знаете о преимуществах внедрения зависимостей, давайте продвинемся вперед и посмотрим, как реализовать внедрение зависимостей с помощью Spring Boot.

Как реализовать DI с помощью Spring Boot?

Шаг 1: Откройте свой Eclipse IDE и создать Приложение Spring Boot щелкнув правой кнопкой мыши и выбрав Весенний стартовый проект . Затем укажите название проекта и нажмите финиш .

Чтобы получить Spring Starter Project, вам необходимо установить Spring Tool Suite из Eclipse Marketplace. Если у вас не установлен Spring Too Suite, вы можете обратиться к моей статье о .

Вы автоматически увидите, что файл приложения создан, как показано ниже.

Шаг 2: Затем создайте класс в том же пакете. Для этого щелкните файл правой кнопкой мыши -> выберите Класс и упомянуть название класса. Затем нажмите на финиш . Это создаст Класс файл. Здесь я создал класс «Клиенты». См. Ниже.

Шаг 3: После этого давайте добавим некоторые свойства для класса. Итак, допустим, мы включаем Идентификатор клиента, имя клиента и Название курса. Укажите код ниже.

package com.example.demo // имя пакета public class Customers {private int custid private String custname private String Coursename}

Шаг 3.1: Как только вы закончите с этим, вы должны генерировать методы Getter и Setter для этих свойств. Для этого выберите эти свойства и щелкните правой кнопкой мыши. Тогда выбирай Источник -> Сгенерируйте методы Getter и Setter.

Ваш код до сих пор должен быть следующим:

package com.example.demo открытый класс Клиенты {private int custid private String custname private String Coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return Coursename} public void setCoursename (String Coursename) {this.coursename = Coursename}}

Теперь рассмотрим сценарий, в котором вам нужно создать объект для клиентов, и вы не хотите делать это вручную. В таком сценарии вам затем придется использовать внедрение зависимостей, чтобы получать объекты, когда вам это нужно.

Итак, теперь давайте посмотрим, как мы можем достичь того же.

Шаг 4: Сначала измените линия бега в файл класса приложения на следующее:

ConfigurableApplicationContext context = SpringApplication.run (DemoApplication.class, аргументы)

Примечание. Если вы получили сообщение об ошибке, импортируйте следующее:

import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.ConfigurableApplicationContext

Эта строка кода выше вернет объект во время выполнения. Теперь добавьте следующий код в файл приложения.

клиенты c = context.getBean (customers.class)

Вышеупомянутая строка скажет компилятору вернуть объект класса клиента. См. Ниже.

Шаг 4.1: Теперь, чтобы проверить, работает он или нет, вы может вернуться в класс Customer и добавьте следующий метод:

public void display () {System.out.println ('Объект успешно возвращен')}

Этот метод отображает вывод «Объект успешно возвращен» при успешном выполнении.

Шаг 4.2: Затем вам нужно вернуться к файлу приложения и упомянуть следующее:

c.display ()

Таким образом вы вызываете объект класса Customers со ссылкой на метод отображения. Обратитесь к изображению ниже для кода класса Application до сих пор:

Теперь, если вы запустите проект, вы увидите исключение Нет подходящего компонента типа . Это связано с тем, что класс клиента, который вы определили, не является Spring Bean, то есть не является объектом Spring. См. Ниже.

Шаг 4.3: Итак, чтобы сообщить об этом Spring Container, нам нужен объект класса customer. Для этого вам нужно упомянуть @Component annotation , в классе Customer. Код в классе Customers должен быть следующим:

package com.example.demo import org.springframework.stereotype.Component @Component public class Customers {private int custid private String custname private String Coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname} public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return Coursename} public void setCoursename (String Coursename) {this.coursename = Coursename} public void display () {System.out.println ('Объект успешно возвращен')}}

Затем, когда вы упоминаете клиентов c = context.getBean (customers.class) компилятор проверит, доступен ли клиентский компонент в контейнере.

Если объект Bean доступен, то среда Spring внедряет объект клиента в ваше приложение. Итак, по сути, этот объект создается фреймворком Spring, который в дальнейшем можно использовать в приложении.

Итак, если я выполню этот проект сейчас, вы увидите, что объект успешно возвращен. См. Ниже.

В основном это то, как вы можете реализовать внедрение зависимостей.

Пример: внедрение зависимости с использованием аннотации с автоматическим подключением

Надеюсь, вы поняли, как работает внедрение зависимостей в Spring Boot. Теперь давайте расширим этот пример и посмотрим, как класс, зависящий от другого класса, использовал функциональные возможности этого класса в Spring Boot.

Шаг 1: Создать новый файл класса , снова щелчок правой кнопкой мыши по пакету и выбрав Новое -> Класс. Теперь укажите имя класса, как показано ниже, и нажмите Финиш.

Шаг 2: Затем давайте добавим некоторые свойства для класса. Итак, допустим, мы включаем TechID, Techname. Укажите код ниже.

пакет com.example.demo public class Technologies {private int techid private String techname}

Шаг 2.1: Как только вы закончите с этим, сгенерируйте Методы Getter и Setter для этих свойств, щелкнув файл правой кнопкой мыши и выбрав Источник -> Создать методы получения и установки.

Шаг 3: Теперь, допустим, нам нужно создать метод, который печатает « Успешно «. Для этого укажите код:

public void tech () {System.out.println ('Успешно')}

Ваш код до сих пор должен выглядеть следующим образом:

package com.example.demo public class Technologies {private int techid private String techname public int getTechid () {return techid} public void setTechid (int techid) {this.techid = techid} public String getTechname () {return techname} public void setTechname (String techname) {this.techname = techname} public void tech () {System.out.println ('Successful')}}

Шаг 4: Теперь, чтобы позвонить tech () метод в класс клиентов , вам необходимо создать объект класса технологий. Поэтому упомяните следующую строку кода в классе клиентов:

частные технологии techdetail

Шаг 4.1: Как только вы закончите с этим, сгенерируйте Методы Getter и Setter для этих свойств щелчок правой кнопкой мыши по файлу а затем выберите Источник -> Создать методы получения и установки.

Шаг 5: Далее, чтобы использовать tech () метод вы должны упомянуть techdetail.tech () под метод отображения класса клиентов . Кроме того, чтобы убедиться, что объект techdetail создан, упомяните @Component annotation это Класс технологий. См. Ниже.

Теперь, когда вы выполните этот проект, вы увидите исключение нулевого указателя . Это потому, что сейчас Класс клиента зависит от класса технологий, но не знает о существовании класса технологий. .

Итак, чтобы позволить Клиенту распознать класс Technologies, вам нужно вставить @Autowired аннотация в классе клиентов. Ваш окончательный код класса клиентов должен быть следующим:

package com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Customers {private int custid private String custname private String Coursename @Autowired private Technologies techdetail public Technologies getTechdetail ( ) {return techdetail} public void setTechdetail (Technologies techdetail) {this.techdetail = techdetail} public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return Coursename} public void setCoursename (String Coursename) {this.coursename = Coursename} public void display () {System.out.println ( 'Объект успешно возвращен') techdetail.tech ()}}

После того, как вы запустите эти файлы, вы увидите, что выходные данные как «Объект успешно возвращен» и «Успешно», что означает, что наша Зависимость классов была выполнена. См. Ниже.

Теперь, когда вы закончили со статьей, ознакомьтесь с от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру.

Есть вопрос к нам? Пожалуйста, укажите это в комментариях к статье «Что такое внедрение зависимостей? ' статья и мы свяжемся с вами как можно скорее.