Какво е инжектиране на зависимост? - Знаете как да приложите инжектиране на зависимост



Тази статия за Какво е инжектиране на зависимост е изчерпателно ръководство за инжектиране на зависимост с практически ръце в пролетно зареждане.

В свят, в който ежедневно работим с езици за програмиране, всички ние сме склонни да търсим методи и трикове, за да улесним живота си. Е, Dependency Injection е една такава техника, която има за цел да помогне на разработчика лесно чрез предоставяне на зависимости на друг обект. В тази статия за Какво е инжектиране на зависимост, ще ви помогна да разберете подробно тази техника.

В тази статия ще бъдат разгледани следните теми:





И така, нека започнем с тази статия.

Какво е инжектиране на зависимост?

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



Сигурен съм, че може да не сте разбрали нищо от горната техническа дефиниция. И така, позволете ми да ви изчистя объркването.

Когато чуете термина зависимост, какво ви идва на ум?

Очевидно е, че нещо разчита на нещо друго за подкрепа, нали?



Е, това е същото, в случай на програмиране също.

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

Видове класове - Какво е инжектиране на зависимост - Edureka

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

  • Клиентски клас: Това е зависим клас и зависи от класа Service.

  • Сервизен клас: Този клас предоставя услуга на класа клиент.

  • Клас на инжектор: Този клас е отговорен за инжектирането на обекта на клас на услуга в класа на клиента

Сега, след като разбрахте, какво е инжектиране на зависимост, нека по-нататък да ви преведа през принципа, на който се основава инжекцията на зависимостта.

Обръщане на контрол

Както споменах по-горе, Инверсията на контрола е принцип, въз основа на който се прави инжектиране на зависимост. Също така, както подсказва името, Inversion of Control се използва основно за обръщане на различни видове допълнителни отговорности на даден клас, а не на основната отговорност.

Ако трябва да ви обясня с по-прости думи, тогава помислете за пример, при който имате способността да готвите. Съгласно принципа на IoC, можете да обърнете управлението, така че вместо да готвите храна, можете просто да поръчате директно отвън, като получавате храна на прага си. По този начин процесът на доставка на храна до прага ви се нарича Инверсия на контрола.

Не е нужно да готвите сами, вместо това можете да поръчате храната и да оставите изпълнител на доставката да достави храната вместо вас. По този начин не е нужно да се грижите за допълнителните отговорности и просто да се фокусирате върху основната работа.

Сега, след като знаете принципа, който стои зад инжектирането на зависимост, позволете ми да ви преведа през видовете инжектиране на зависимост.

Видове инжектиране на зависимост

Има основно три вида инжектиране на зависимост:

как да намеря типа данни в python
  • Инжектиране на конструктор: При този тип инжектиране инжекторът доставя зависимост чрез конструктора на клиентски клас.

  • Инжектиране на сетер / Инжектиране на свойства: При този тип инжектиране инжекторният метод инжектира зависимостта от метода на задаване, изложен от клиента.

  • Инжектиране на интерфейс: При този тип инжектиране инжекторът използва интерфейс, за да осигури зависимост към клиентския клас. Клиентите трябва да внедрят интерфейс, който ще изложи aметод на сетеркойтоприема зависимостта.

Досега се надявам да сте разбрали факта, че Dependency Injection е отговорен за създаването на обекти, да разбере кои класове изискват тези обекти и накрая да им предоставите обектите. И така, в тази бележка, нека по-нататък да разгледаме ползите от инжектирането на зависимост.

Ползи от инжектирането на зависимост

Преди да изброя предимствата на инжекцията за зависимост, позволете ми да ви обясня необходимостта от тази инжекция на ниво индустрия, за да ви помогна да разберете по-добре ползите.

Помислете за сценарий, при който имате имейл клас, чиято единствена отговорност е да се грижи за получените имейли. Сега този клас ще има обекти като „До имейл адрес“, „От имейл адрес“, „Тема и тялото на имейла“.

Сега, ако компанията иска да запази текстови и аудио съобщения, мислите ли, че този клас може да запази съобщението?

Е, отговорът е не?

Това е така, защото класът за електронна поща не може да обработва параметрите на текста и аудио съобщенията. В такива случаи ще трябва да пресъздадете класа. Сега пресъздаването на класа е доста тромава работа, особено ако се налага да го правите редовно. Вместо това, ако използвате Dependency Injection, можете да промените обектите по време на изпълнение. Така че, по този начин не е нужно да пресъздавате класа, който допълнително ви помага по много начини.

Така че, ако трябва да обобщя ползите от инжектирането на зависимостта, тогава следните са предимствата:

Добре, така че сега, когато знаете предимствата на Dependency Injection, нека да продължим напред и да видим как да приложим Dependency Injection с помощта на Spring Boot.

Как да внедрим DI, използвайки Spring Boot?

Етап 1: Отвори си Eclipse IDE и създайте a Приложение за пролетно зареждане като щракнете с десния бутон и изберете Проект „Пролетен стартер“ . След това споменете името на проекта и кликнете върху завършек .

За да получите проекта Spring Starter, трябва да инсталирате Spring Tool Suite от Eclipse Marketplace. В случай, че нямате инсталиран Spring Too Suite, можете да се обърнете към статията ми на .

Ще видите автоматично, че файлът на приложението е създаден, както е показано по-долу.

Стъпка 2: След това създайте клас в същия пакет. За да направите това, щракнете с десния бутон върху файла -> изберете Клас и споменавам име на класа. След това кликнете върху завършек . Това ще създаде Клас файл. Тук създадох клас на клиентите. Вижте по-долу.

Стъпка 3: След това нека добавим някои свойства за класа. Така че, да кажем, ние включваме Идент. № на клиента, име на клиента и Име на курса. Споменете кода по-долу.

пакет com.example.demo // име на пакет публичен клас Клиенти {private int custid private String custname private String coursename}

Стъпка 3.1: След като приключите с това, трябва генерирайте Getter и Setter методи за тези свойства. За да направите това, изберете тези свойства и щракнете с десния бутон. След това изберете Източник -> Генериране на методи Getter и Setter.

Вашият код досега трябва да бъде както следва:

пакет 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: Сега, за да проверите дали работи или не, вие може да се върне в класа на клиента и добавете метод, както следва:

публичен невалиден дисплей () {System.out.println ('Обектът е върнат успешно')}

Този метод ще покаже изход „Обектът е върнат успешно“ при успешно изпълнение.

свързана и несвързана трансформация в informatica

Стъпка 4.2: След това трябва да се върнете към файла на приложението и да споменете следното:

c.display ()

Чрез това извиквате обекта от класа Клиенти с препратка към метода на показване. Вижте изображението по-долу за кода на клас Application досега:

Сега, ако изпълните проекта, ще видите изключение от Няма квалифициран боб от тип . Това е така, защото клиентският клас, който сте дефинирали, не е Spring Bean, т.е.не е Spring Object. Вижте по-долу.

Стъпка 4.3: И така, за да кажем на Spring Container, че ни трябва обект от класа на клиента. За да направите това, трябва да споменете @ Компонентна анотация , в класа Клиент. Кодът в класа Клиенти трябва да бъде както по-долу:

пакет com.example.demo импортиране org.springframework.stereotype.Component @Component публичен клас Клиенти {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} публичен низ 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 структурата, която може да бъде използвана допълнително в приложението.

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

По принцип това е начинът, по който можете да приложите инжектиране на зависимост.

Пример: Впръскване на зависимост с използване на автоматична анотация

клас __init__ python

Надявам се, че сте разбрали как работи Dependency Injection в Spring Boot. Сега, нека разширим този пример и по-нататък да видим как клас, зависим от другия клас, използва функционалностите на този клас в Spring Boot.

Етап 1: Създайте нов файл на класа , от отново щракнете с десния бутон върху пакета и чрез избор Ново -> Клас. Сега споменете името на класа както по-долу и кликнете върху Завършек.

Стъпка 2: След това нека добавим някои свойства за класа. Така че, да кажем, ние включваме TechID, Techname. Споменете кода по-долу.

пакет com.example.demo публичен клас Technologies {private int techid private String techname}

Стъпка 2.1: След като приключите с това, генерирайте Методи Getter и Setter за тези свойства, като щракнете с десния бутон върху файла и след това изберете Източник -> Генериране на методи Getter и Setter.

Стъпка 3: Нека кажем, че трябва да създадем метод, който отпечатва „ Успешен “. За да споменете кода:

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

Вашият код до сега трябва да изглежда по-долу:

пакет com.example.demo публичен клас Технологии {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 ('Успешно')}}

Стъпка 4: Сега, за да се обадите на метод tech () в клиентска класа , трябва да създадете обект от класа технологии. Затова споменете следния ред код в класа клиенти:

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

Стъпка 4.1: След като приключите с това, генерирайте Методи Getter и Setter за тези свойства от щракване с десния бутон върху файла и след това изберете Източник -> Генериране на методи Getter и Setter.

Стъпка 5: След това използвайте метод tech () , трябва да споменете techdetail.tech () под метод на показване на класа клиенти . Също така, за да се уверите, че обектът на технически подробности е инстанцирано споменаване @ Компонентна анотация е Клас по технологии. Вижте по-долу.

Сега, когато изпълните този проект, ще видите a Изключение Null Pointer . Това е така, защото сега Класът клиент зависи от класа Technologies и въпреки това не знае съществуването на класа Technologies .

Така че, за да позволите на клиента да разпознае класа Technologies, трябва да вмъкнете @Autowired анотация в класа Клиенти. Крайният ви код на класа клиенти трябва да бъде както следва:

пакет com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Клиенти {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 ()}}

След като изпълните тези файлове, ще видите резултатите като Object Returned Successfully и Successful, което означава, че нашата Зависимост на класовете е изпълнена. Вижте по-долу.

След като приключите със статията, разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на това „Какво е инжектиране на зависимост? ”Статия и ние ще се свържем с вас възможно най-скоро.