Egy olyan világban, ahol programozási nyelvekkel dolgozunk nap mint nap, mindannyian hajlamosak vagyunk módszereket és trükköket keresni, hogy megkönnyítsük az életünket. Nos, a Dependency Injection egy ilyen technika, amelynek célja, hogy könnyebben segítse a fejlesztői kódot egy másik objektum függőségeinek biztosításával. Ebben a cikkben: Mi a függőségi injekció, segítek megérteni ezt a technikát részletesen.
A cikk a következő témákkal foglalkozik:
- Bevezetés a függőség injekciójába
- A vezérlés inverziója
- A függőségi injekció típusai
- A függőségi injekció előnyei
- Végezze el a függőségi injekciót a tavaszi indítással
Kezdjük tehát ezzel a cikkel.
Mi a függőségi injekció?
A függőségi injekció az objektum azon képessége, hogy egy másik objektum függőségeit szolgáltassa.
Most már biztos vagyok benne, hogy a fenti technikai meghatározás alapján nem értett semmit. Tehát hadd töröljem a zavart.
Amikor a függőség kifejezést hallja, mi jut eszébe?
Nyilvánvaló, hogy valami másra támaszkodik a támogatásra, igaz?
Nos, ez ugyanaz, a programozás esetében is.
A programozás függősége egy olyan megközelítés, amikor egy osztály egy másik osztály specifikus funkcióit használja. Tehát például, ha két A és B osztályt veszünk figyelembe, és azt mondjuk, hogy az A osztály a B osztály funkcionalitásait használja, akkor ez azt sugallja, hogy az A osztály B osztályú függőséggel rendelkezik. Ha Java-ban kódol, akkor tudnia kell hogy, muszájhozzon létre egy B osztályú példányt, mielőtt az objektumokat az A osztály használja.
Tehát, ha most meg kell határoznom az Ön számára a függőségi injekciót, akkor az objektum létrehozásának folyamatát egy másik osztály számára, és az osztálynak a függőség használatával történő közvetlen engedélyezését függőségi injekciónak hívják.. Főleg három osztálya van:
Ügyfélosztály: Ez a függő osztály és a Szolgáltatás osztálytól függ.
Szolgáltatási osztály: Ez az osztály szolgáltatást nyújt az ügyfélosztály számára.
Befecskendező osztály: Ez az osztály felelős azért, hogy a szolgáltatásosztály objektumot az ügyfélosztályba injektálja
Most, hogy megértette, mi a függőségi injekció, engedje meg, hogy ezután átvigyem Önt az elven, amelyen a függőségi injekció alapul.
A vezérlés inverziója
Amint azt fentebb említettem, a vezérlés inverziója egy olyan elv, amely alapján a függőségi injekció készül. Továbbá, amint a neve is sugallja, az Inversion of Control alapvetően az osztály különféle különféle felelősségeinek megfordítására szolgál, nem pedig a fő felelősségre.
Ha egyszerűbb kifejezésekkel kell elmagyaráznom Önt, akkor vegyen egy példát, ahol képes főzni. Az IoC elve szerint megfordíthatja a vezérlést, így ahelyett, hogy ételeket főzne, egyszerűen csak kívülről rendelhet, ahol az ételt a küszöbén kapja. Így az ön házához szállított étel folyamatát az Ellenőrzés inverziójának nevezzük.
Nem kell magának főznie, ehelyett megrendelheti az ételt, és hagyhatja, hogy a kézbesítő ügyvezető szállítsa az Ön számára az ételt. Így nem kell gondoskodnia a további felelősségekről, és csak a fő munkára kell összpontosítania.
Most, hogy ismeri a függőségi injekció mögött rejlő elvet, hadd vezessem át a függőségi injekció típusait.
A függőségi injekció típusai
A függőségi injekciónak főleg három típusa van:
legjobb java ide a Windows-hoz
Kivitelező befecskendezése: Ebben a típusú injekcióban az injektor a kliens osztály konstruktorán keresztül látja el a függőséget.
Setter injekció / tulajdonság injekció: Ebben a típusú injekcióban az injektoros módszer a kliens által kitett szetter módszer függőségét injektálja.
Interfész befecskendezése: Ebben a típusú injekcióban az injektor az interfészt használja az ügyfélosztálytól való függőség biztosítására. Az ügyfeleknek olyan interfészt kell megvalósítaniuk, amely aszetter módszermelyikelfogadja a függőséget.
Remélem, hogy mostanáig megértette azt a tényt, hogy a Dependency Injection felelős az objektumok létrehozásáért, annak megértéséért, mely osztályok igénylik ezeket az objektumokat, és végül ellátja ezeket az osztályokat az objektumokkal. Tehát ebből a szempontból vizsgáljuk meg legközelebb a függőségi injekció előnyeit.
A függőségi injekció előnyei
Mielőtt felsorolom a függőségi injekció előnyeit, hadd magyarázzam el Önnek az injekció szükségességét ipari szinten, hogy jobban megértsem az előnyöket.
Vegyünk egy forgatókönyvet, ahol van egy e-mail osztályod, amelynek kizárólagos felelőssége a kapott e-mailek gondozása. Ennek az osztálynak olyan objektumai lesznek, mint az „E-mail címre”, „E-mail címről”, „Az e-mail tárgya és törzse”.
Ha most a cég szöveges és audio üzeneteket akar menteni, akkor szerinted ez az osztály képes elmenteni az üzenetet?
Nos, a válasz nem?
Ez azért van, mert az Email osztály nem tudja kezelni a szöveges és az audio üzenetek paramétereit. Ilyen esetekben újra létre kell hoznia az osztályt. Most az osztály újrateremtése meglehetősen nehézkes munka, különösen, ha rendszeresen muszáj. Ehelyett, ha a Dependency Injection alkalmazást használja, az objektumokat futás közben módosíthatja. Tehát ily módon nem kell újrateremtenie az órát, amely sok szempontból tovább segít.
Tehát, ha összefoglalnom kell a függőségi injekció előnyeit, akkor az alábbiak a következők:
Rendben, így most, hogy ismeri a függőségi injekció előnyeit, lépjünk előre, és nézzük meg, hogyan lehet végrehajtani a függőségi injekciót a tavaszi indítással.
Hogyan lehet megvalósítani a DI-t a Spring Boot segítségével?
1. lépés: Nyissa meg Eclipse IDE és hozzon létre egy Tavaszi csomagtartó alkalmazás jobb gombbal kattintva és kiválasztva Tavaszi Kezdő Projekt . Ezután említse meg a projekt nevét és kattintson a gombra Befejez .
A Tavaszi Kezdő Projekt megszerzéséhez telepítenie kell a Spring Tool Suite alkalmazást az Eclipse piactérről. Abban az esetben, ha nincs telepítve a Spring Too Suite program, olvassa el a cikkemet .
Automatikusan látni fogja, hogy egy alkalmazásfájl jön létre az alábbiak szerint.
2. lépés: Ezután hozzon létre egy osztályt ugyanabban a csomagban. Ehhez kattintson a jobb gombbal a fájlra -> válassza Osztály és említsd meg a osztály név. Ezután kattintson a gombra Befejez . Ez létrehozza a Osztály fájl. Itt hoztam létre egy Ügyfelek osztályt. Lásd alább.
3. lépés: Ezután tegyünk be néhány tulajdonságot az osztályhoz. Tehát, mondjuk, beletesszük Ügyfél-azonosító, ügyfél neve és A tantárgy neve. Említse meg az alábbi kódot.
csomag com.example.demo // csomag neve public class Ügyfelek {private int custid private Karakterlánc custname privát String Coursename}
3.1. Lépés: Miután ezzel végzett, meg kell Getter és Setter módszerek generálása ezekre a tulajdonságokra. Ehhez válassza ki ezeket a tulajdonságokat, és kattintson a jobb gombbal. Akkor válassza Forrás -> Getter és Setter módszerek generálása.
Eddig a kódodnak a következőknek kell lennie:
csomag com.example.demo public class Ügyfelek {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}}
Vizsgáljon meg egy olyan forgatókönyvet, amelyben létre kell hoznia egy objektumot az ügyfelek számára, és nem akarja manuálisan megtenni. Ilyen esetekben a Dependency Injekciót kell használnia az objektumok megszerzéséhez, amikor csak szükséges.
Tehát ezután vizsgáljuk meg, hogyan érhetjük el ugyanezt.
4. lépés: Először változtassa meg a futósor ban,-ben alkalmazásosztály fájl a következőkre:
ConfigurableApplicationContext context = SpringApplication.run (DemoApplication.class, args)
Megjegyzés: Ha hibaüzenetet kap, importálja a következőket:
import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.ConfigurableApplicationContext
Ez a fenti kódsor egy objektumot ad vissza a végrehajtáskor. Most adja hozzá a következő kódot az alkalmazásfájlhoz.
ügyfelek c = context.getBean (customers.class)
A fenti sor megmondja a fordítónak, hogy adja vissza az ügyfélosztály objektumát. Lásd alább.
4.1 lépés: Most, hogy ellenőrizze, működik-e vagy sem, ön visszatérhet az Ügyfél osztályba és adjon hozzá egy módszert az alábbiak szerint:
public void display () {System.out.println ('Az objektum sikeresen visszakerült')}
Ez a módszer a sikeres végrehajtáskor megjeleníti az „Objektum sikeresen visszaküldve” kimenetet.
legjobb ide a java fejlesztéséhez
4.2 lépés: Ezután vissza kell térnie az alkalmazásfájlhoz, és meg kell említenie a következőket:
c.display ()
Ezen keresztül hívja meg az Ügyfelek osztály objektumát a megjelenítési módszer hivatkozásával. Az alkalmazási osztály kódját az alábbi képen tekintheti meg:
Most, ha végrehajtja a projektet, megjelenik egy kivéve a Nincs minősített típusú bab . Ez azért van, mert az Ön által definiált ügyfélosztály nem Spring Bean, azaz nem Spring Object. Lásd alább.
4.3. Lépés: Tehát ahhoz, hogy ezt elmondhassuk a Spring Container-nek, szükségünk van a vevőosztály egyik objektumára. Ehhez meg kell említenie a @Komponens annotáció , az Ügyfél osztályban. Az Ügyfelek osztály kódjának az alábbiaknak kell lennie:
csomag com.example.demo import org.springframework.stereotype.Component @Component public class Ügyfelek {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 ('Az objektum sikeresen visszakerült')}}
Aztán amikor megemlíti az ügyfeleket c = context.getBean (customers.class) a fordító ellenőrzi, hogy a tárolóban van-e elérhető ügyfél-bab.
Ha a Bean elérhető, akkor a tavaszi keretrendszer beadja az ügyfélobjektumot az alkalmazásába. Tehát alapvetően ezt az objektumot a Spring keretrendszer hozza létre, amely tovább használható az alkalmazásban.
Tehát, ha most végrehajtom ezt a projektet, akkor megjelenik egy kimenet, amelyet az Object sikeresen visszaadott. Lásd alább.
Alapvetően így valósíthatja meg a Dependency Injection alkalmazást.
Példa: Függőségi injekció automatikus vezetésű kommentár használatával
java program a fibonacci sorozatokhoz
Remélem, megértette, hogyan működik a Dependency Injection a Spring Boot-ban. Most bővítsük ki ezt a példát, és nézzük meg, hogy egy másik osztálytól függő osztály hogyan használta az osztály funkcióit a Spring Boot alkalmazásban.
1. lépés: Újat csinálni osztályfájl , ismét Kattintson a jobb gombbal a csomagra és a választással Új -> Osztály. Most említse meg az osztály nevét az alábbiak szerint, és kattintson a gombra Befejez.
2. lépés: Ezután tegyünk be néhány tulajdonságot az osztályhoz. Tehát, mondjuk, beletesszük TechID, Techname. Említse meg az alábbi kódot.
com.example.demo public class Technologies csomag {private int techid private String techname}
2.1. Lépés: Miután ezzel végzett, generáljon Getter és Setter módszerek ezekhez a tulajdonságokhoz kattintson a jobb gombbal a fájlra, majd válassza a lehetőséget Forrás -> Getter és Setter módszerek generálása.
3. lépés: Mondjuk, létre kell hoznunk egy módszert, amely Sikeres “. Ehhez említse meg a kódot:
public void tech () {System.out.println ('Sikeres')}
Az eddigi kódodnak az alábbiak szerint kell kinéznie:
csomag 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 ('Sikeres')}}
4. lépés: Most, hogy felhívjam a tech () módszer ban,-ben ügyfelek osztálya , létre kell hoznia a technológiák osztályának objektumát. Tehát említse meg a következő kódsort az ügyfelek osztályában:
private Technologies technikai részletek
4.1 lépés: Miután ezzel végzett, generáljon Getter és Setter módszerek ezekre a tulajdonságokra a kattintson a jobb gombbal a fájlra majd válassza Forrás -> Getter és Setter módszerek generálása.
5. lépés: Ezután a tech () módszer , meg kell említenie techdetail.tech () alatt az ügyfélosztály megjelenítési módja . Továbbá annak biztosítása érdekében, hogy a techdetail objektum legyen azonnali megemlítés @Komponens annotáció az a Technológiák osztály. Lásd alább.
Most, amikor végrehajtja ezt a projektet, látni fogja a Null mutató kivétel . Ez azért van, mert most a Az ügyfélosztály a Technologies osztálytól függ, és mégsem ismeri a Technologies osztály létezését .
Tehát ahhoz, hogy az Ügyfél felismerje a Technologies osztályt, be kell helyeznie a @ Engedélyezett kommentár az Ügyfelek osztályban. Az ügyfélosztály végső kódjának a következőknek kell lennie:
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 ( 'Sikeresen visszaküldött objektum') techdetail.tech ()}}
Miután végrehajtotta ezeket a fájlokat, a kimeneteket az Object Returned and Sikeres eredményként fogja látni, ami azt jelenti, hogy az osztályok függősége teljesült. Lásd alább.
Most, hogy elkészült a cikkel, nézze meg a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon.
Van egy kérdésünk? Kérjük, említse meg a „Mi a függőség injekciója” megjegyzés szakaszában. ”Cikk és a lehető leghamarabb kapcsolatba lépünk Önnel.