Шта је ињекција зависности? - Знати како применити ињекцију зависности



Овај чланак о томе шта је убризгавање зависности је свеобухватан водич за убризгавање зависности помоћу практичног рада у пролећном покретању.

У свету у којем свакодневно радимо са програмским језицима, сви смо склони да трагамо за методама и триковима који ће нам олакшати живот. Па, убризгавање зависности је једна таква техника која има за циљ да помогне програмеру лако пружајући зависности другог објекта. У овом чланку о Шта је ињекција зависности, помоћи ћу вам да детаљно разумете ову технику.

У овом чланку биће обрађене следеће теме:





Па, кренимо са овим чланком.

Шта је ињекција зависности?

Ињекција зависности је способност објекта да обезбеди зависности другог објекта.



Сада сам прилично сигуран да можда нисте ништа разумели према горњој техничкој дефиницији. Па, да вам разјасним забуну.

Када чујете израз зависност, шта вам пада на памет?

Очигледно је да се нешто ослања на нешто друго за подршку, зар не?



Па, то је исто, у случају програмирања такође.

Зависност у програмирању је приступ где класа користи специфичне функционалности друге класе. Тако, на пример, Ако узмете у обзир две класе А и Б и кажете да класа А користи функционалности класе Б, онда се подразумева да класа А има зависност од класе Б. Сада, ако кодирате на Јави, морате знати то, морашкреирајте инстанцу класе Б пре него што објекте користи класа А.

Врсте часова - Шта је ињекција зависности - Едурека

Дакле, ако сада морам да дефинишем убризгавање зависности за вас, онда се процес стварања објекта за неку другу класу и допуштање класи која директно користи зависност назива Депенденци Ињецтион. Укључује углавном три класе:

  • Класа клијента: Ово је зависна класа и зависи од класе услуге.

  • Сервисна класа: Ова класа пружа услугу клијентској класи.

  • Класа ињектора: Ова класа је одговорна за убризгавање објекта класе услуге у класу клијента

Сада, када сте схватили, шта је ињекција зависности, дозволите ми да вас даље водим кроз принцип на коме се заснива ињекција зависности.

Инверзија контроле

Као што сам горе споменуо Инверзија контроле је принцип на основу којег се врши ињекција зависности. Такође, као што и само име говори, Инверзија контроле се у основи користи за извртање различитих врста додатних одговорности класе, а не за главну одговорност.

Ако вам морам објаснити једноставније, размотрите пример у коме имате способност кувања. Према ИоЦ принципу, можете обрнути контролу, па уместо да кувате храну, можете само директно наручити споља, при чему храну добијате на свом прагу. Стога се процес хране која вам се испоручује на вашем прагу назива Инверзија контроле.

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

Сад, пошто знате принцип који стоји иза убризгавања зависности, дозволите ми да вас водим кроз типове убризгавања зависности.

Врсте убризгавања зависности

Постоје углавном три врсте убризгавања зависности:

  • Ињекција конструктора: У овој врсти убризгавања, ињектор испоручује зависност путем конструктора класе клијента.

  • Ињекција сетера / убризгавање својства: У овој врсти убризгавања, метода убризгавања убризгава зависност од методе постављача коју изложи клијент.

    претвори децимални у бинарни питхон
  • Убризгавање интерфејса: У овој врсти убризгавања, ињектор користи интерфејс да би пружио зависност од класе клијента. Клијенти морају применити интерфејс који ће открити аметода сетеракојаприхвата зависност.

До сада, надам се да сте разумели чињеницу да је убризгавање зависности одговорно за креирање објеката, разумевање којих класа захтевају те објекте и коначно пружање тих класа објектима. Дакле, на тој белешци, хајде да даље размотримо предности убризгавања зависности.

Предности убризгавања зависности

Пре него што набројим предности Депенденци Ињецтион, дозволите ми да вам објасним потребу за овом ињекцијом на индустријском нивоу како бих вам помогао да боље разумете предности.

Размотрите сценарио у којем имате класу е-поште, чија је искључива одговорност да се брине о примљеним е-порукама. Сада ће ова класа имати објекте као што су „На адресу е-поште“, „Из адресе е-поште“, „Предмет и тело е-поште“.

Ако компанија жели да сачува текстуалне и аудио поруке, да ли мислите да ова класа може да сачува поруку?

рашчлањивање кмл датотеке у јави

Па, одговор је не?

То је зато што класа е-поште не може да обрађује параметре текста и звучних порука. У таквим случајевима ћете морати поново створити наставу. Сада је поновно стварање наставе прилично гломазан посао, поготово ако га морате редовно обављати. Уместо тога, ако користите убризгавање зависности, можете да мењате објекте током извођења. Дакле, на овај начин не морате поново да креирате наставу која вам даље помаже на много начина.

Дакле, ако морам да резимирам предности убризгавања зависности, онда су следеће предности:

У реду, сада, кад знате које су користи од убризгавања зависности, идемо напред и видећемо како применити убризгавање зависности помоћу Спринг Боот-а.

Како имплементирати ДИ помоћу Спринг Боот-а?

Корак 1: Отвори свој Ецлипсе ИДЕ и створити а Спринг Боот Апплицатион десним кликом и избором Спринг Стартер Пројецт . Затим спомените назив пројекта и кликните на Заврши .

Да бисте добили Спринг Стартер Пројецт, морате инсталирати Спринг Тоол Суите са Ецлипсе Маркетплаце. У случају да немате инсталиран Спринг Тоо Суите, можете се позвати на мој чланак о .

Аутоматски ћете видети да је датотека апликације креирана као доле.

Корак 2: Даље, креирајте класу у истом пакету. Да бисте то урадили, кликните десним тастером миша на датотеку -> одаберите Класа и поменути Назив класе. Затим кликните на Заврши . Ово ће створити а Класа датотека. Овде сам креирао класу Купци. Погледајте доле.

Корак 3: После тога, ставимо нека својства за класу. Дакле, рецимо, укључујемо ИД клијента, име купца и Назив курса. Спомните доњи код.

пакет цом.екампле.демо // назив пакета јавна класа Купци {привате инт цустид привате Стринг цустнаме привате Стринг цоурсенаме}

Корак 3.1: Кад завршите с тим, морате генерисати Геттер и Сеттер методе за ова својства. Да бисте то урадили, изаберите ова својства и кликните десним тастером миша. Онда одаберите Извор -> Генеришите методе Геттер и Сеттер.

До сада би ваш код требао бити следећи:

пакет цом.екампле.демо публиц цласс Купци {привате инт цустид привате Стринг цустнаме привате Стринг цоурсенаме публиц инт гетЦустид () {ретурн цустид} публиц воид сетЦустид (инт цустид) {тхис.цустид = цустид} публиц Стринг гетЦустнаме () {ретурн цустнаме } публиц воид сетЦустнаме (Стринг цустнаме) {тхис.цустнаме = цустнаме} публиц Стринг гетЦоурсенаме () {ретурн цоурсенаме} јавна воид сетЦоурсенаме (Стрингнаме име) {тхис.цоурсенаме = име курса}}

Сада размотрите сценарио у којем морате да направите објекат за купце, а не желите да то радите ручно. У таквом сценарију, тада ћете морати да користите убризгавање зависности да бисте добили објекте кад год то затребате.

Дакле, хајде да сада размотримо како то можемо постићи.

Корак 4: Прво промените трчање линија у датотека класе апликације на следеће:

ЦонфигураблеАпплицатионЦонтект цонтект = СпрингАпплицатион.рун (ДемоАпплицатион.цласс, аргс)

Напомена: Ако се појави грешка, увезите следеће:

импорт орг.спрингфрамеворк.боот.СпрингАпплицатион импорт орг.спрингфрамеворк.боот.аутоцонфигуре.СпрингБоотАпплицатион импорт орг.спрингфрамеворк.цонтект.ЦонфигураблеАпплицатионЦонтект

Овај горњи ред кода вратиће објекат у време извршења. Сада додајте следећи код у датотеку апликације.

купци ц = цонтект.гетБеан (цустомерс.цласс)

Горњи ред ће рећи компајлеру да врати објекат класе купаца. Погледајте доле.

Корак 4.1: Сада, да бисте проверили да ли ради или не, ви можете да се вратите у класу Купац и додајте метод на следећи начин:

јавни воид приказ () {Систем.оут.принтлн ('Објекат је враћен успешно')}

Ова метода ће приказати излаз „Објект враћен успјешно“ након успјешног извршавања.

Корак 4.2: Даље, морате се вратити у датотеку апликације и споменути следеће:

ц.дисплаи ()

Кроз ово позивате објекат класе Купци са референцом методе приказа. Код класе Апплицатион до сада погледајте на доњој слици:

Ако извршите пројекат, видећете изузетак Нема квалификованог зрна типа . То је зато што класа купаца коју сте дефинисали није Спринг Беан, тј. Није Спринг објект. Погледајте доле.

Корак 4.3: Дакле, да бисмо то рекли Спринг Цонтаинер-у, потребан нам је објекат класе купаца. Да бисте то урадили, морате да поменете знак Анотација о компонентама , у класи Купац. Код у класи Купци треба да буде следећи:

пакет цом.екампле.демо импорт орг.спрингфрамеворк.стереотипе.Цомпонент @Цомпонент публиц цласс Купци {привате инт цустид привате Стринг цустнаме привате Стринг цоурсенаме публиц инт гетЦустид () {ретурн цустид} публиц воид сетЦустид (инт цустид) {тхис.цустид = цустид} јавни стринг гетЦустнаме () {ретурн цустнаме} јавна празнина сетЦустнаме (стринг цустнаме) {тхис.цустнаме = цустнаме} јавна стринг гетЦоурсенаме () {ретурн цоурсенаме} јавна воид сетЦоурсенаме (стринг име курса) {тхис.цоурсенаме = цоурсенаме} јавна празнина дисплаи () {Систем.оут.принтлн ('Објекат је успешно враћен')}}

Затим, када помињете купце ц = цонтект.гетБеан (купци.класа) компајлер ће проверити да ли је у контејнеру доступан пасуљ купца или не.

Ако је Беан доступан, онда Спринг Спринг убризгава кориснички објекат у вашу апликацију. Дакле, у основи овај објект креира Спрингов оквир, који се даље може користити у апликацији.

Дакле, ако сада извршим овај пројекат, видећете излаз који је Објецт успешно враћен. Погледајте доле.

Ово је у основи начин на који можете применити ињекцију зависности.

Пример: Ињекција зависности помоћу аутоматског повезивања

Надам се да сте разумели како Депенденци Ињецтион ради у Спринг Боот-у. Сада, продужимо овај пример и даље ћемо видети како је класа зависна од друге класе користила функционалности те класе у Спринг Боот-у.

Корак 1: Створити нова датотека класе , би агаин десни клик на пакет и по избору Ново -> Разред. Сада спомените назив класе као испод и кликните на Заврши.

Корак 2: Даље, ставимо нека својства за класу. Дакле, рецимо, укључујемо ТецхИД, Тецхнаме. Спомните доњи код.

пакет цом.екампле.демо јавна класа технологије {привате инт тецхид привате Стринг тецхнаме}

Корак 2.1: Када завршите с тим, генеришите Геттер и Сеттер методе за ова својства десним кликом на датотеку, а затим одаберите Извор -> Генериши методе гетера и сетера.

Корак 3: Сада, рецимо, морамо створити метод који исписује „ Успешан “. Да бисте то урадили, спомените код:

јавна воид технологија () {Систем.оут.принтлн ('Успешно')}

До сада би ваш код требао изгледати доле:

пример оквира за тест селена вебдривер
пакет цом.екампле.демо јавна класа Тецхнологиес {привате инт тецхид привате Стринг тецхнаме публиц инт гетТецхид () {ретурн тецхид} јавна празнина сетТецхид (инт тецхид) {тхис.тецхид = тецхид} јавни низ гетТецхнаме () {ретурн тецхнаме} јавна празнина сетТецхнаме (стринг тецхнаме) {тхис.тецхнаме = тецхнаме} јавна воид технологија () {Систем.оут.принтлн ('Успешно')}}

Корак 4: Сада, да позовемо тецх () метода у класа купаца , морате да направите објекат из класе технологија. Дакле, спомените следећи ред кода у класи купаца:

приватни Тецхнологиес тецхдетаил

Корак 4.1: Када завршите с тим, генеришите Геттер и Сеттер методе за ова својства по десним кликом на датотеку а затим изаберите Извор -> Генериши методе гетера и сетера.

Корак 5: Даље, да користите тецх () метода , морате напоменути тецхдетаил.тецх () под начин приказа класе купаца . Такође, како бисмо били сигурни да је предмет техничког детаља инстанцирано помињан Анотација о компонентама је Час технологија. Погледајте доле.

Сада, када извршите овај пројекат, видећете Изузетак нулл показивача . То је зато што сада Класа купаца је зависна од класе Тецхнологиес, ​​али ипак не зна за постојање класе Тецхнологиес .

Дакле, да бисте омогућили купцу да препозна класу Тецхнологиес, ​​морате уметнути @Аутовиред анотација у класи Купци. Коначни код класе купаца треба да буде следећи:

пакет цом.екампле.демо импорт орг.спрингфрамеворк.беанс.фацтори.аннотатион.Аутовиред импорт орг.спрингфрамеворк.стереотипе.Цомпонент @Цомпонент јавна класа Купци {привате инт цустид привате Стринг цустнаме привате Стринг цоурсенаме @Аутовиред привате Тецхнологиес тецхдетаил публиц Тецхнологиес гетТецхдетаил ( ) {ретурн тецхдетаил} јавна празнина сетТецхдетаил (Тецхнологиес тецхдетаил) {тхис.тецхдетаил = тецхдетаил} публиц инт гетЦустид () {ретурн цустид} јавна празнина сетЦустид (инт цустид) {тхис.цустид = цустид} јавни низ гетЦустнаме () {ретурн цустнаме } публиц воид сетЦустнаме (Стринг цустнаме) {тхис.цустнаме = цустнаме} публиц Стринг гетЦоурсенаме () {ретурн цоурсенаме} јавна воид сетЦоурсенаме (Стрингнаме цоурсе) {тхис.цоурсенаме = цоурсенаме} публиц воид дисплаи () {Систем.оут.принтлн ( 'Предмет је враћен успешно') тецхдетаил.тецх ()}}

Једном када извршите ове датотеке, видећете излазе као Објецт Ретурнед Суццессфулли анд Суццессфул, што значи да је наша Зависност класа испуњена. Погледајте доле.

Сад кад сте завршили са чланком, погледајте Едурека, поуздана компанија за учење на мрежи са мрежом од више од 250.000 задовољних ученика раширених широм света.

Имате питање за нас? Молимо вас да га спомињете у одељку за коментаре овог „Шта је ињекција зависности? ”Чланак и јавићемо вам се у најкраћем могућем року.