CodeGym/Java blog/Véletlen/Tavasz a lustáknak Alapítvány, alapfogalmak és példák kód...
John Squirrels
Szint
San Francisco

Tavasz a lustáknak Alapítvány, alapfogalmak és példák kóddal. 1. rész

Megjelent a csoportban
Tavasz a lustáknak Alapítvány, alapfogalmak és példák kóddal.  1. rész – 1Ebben a cikkben nem fogom elmondani, hogyan lehet egy működő tavaszi projektet 5 perc alatt elindítani a kódom segítségével. Csak az alapokat fogom leírni – olyan dolgokat, amelyekről lehet, hogy nem tud, és mégis létrehoz egy projektet. Ebben a cikkben azonban még mindig nem fogja megérteni, mi történik, és ami még fontosabb, miért.

Mi a tavaszi keretrendszer?

A Spring Framework vagy egyszerűen a Spring az egyik legnépszerűbb keretrendszer a webalkalmazások Java nyelven történő létrehozásához. A keretrendszer olyan, mint egy könyvtár (talán Ön jobban ismeri ezt a kifejezést), de van valami, amit figyelembe kell venni. Durván fogalmazva, amikor egy könyvtárat használ, egyszerűen létrehozza az abban található osztályok példányait, meghívja a szükséges metódusokat, és így megkapja a kívánt eredményt. Más szóval, ez inkább kötelező megközelítés: a programodban kifejezetten megjelölöd azt a konkrét pillanatot, amikor melyik objektumot kell létrehoznod, mikor melyik konkrét metódust kell meghívni stb. A keretrendszerekkel a dolgok kissé eltérnek. Egyszerűen írsz néhány saját osztályt, és írsz beléjük néhány logikát, de aztán maga a keretrendszer létrehozza az osztályaid példányait, és meghívja a metódusaikat. Az Ön osztályai általában implementálnak néhány interfészt a keretrendszerből, vagy öröklik annak egyes osztályait, így biztosítva az Ön számára már megírt funkciókat. De ez nem mindig van így. Például a Spring a lehető legnagyobb mértékben megpróbálja elkerülni az ilyen szoros csatolást (ahol az osztályok közvetlenül függnek a keretrendszer osztályaitól/interfészeitől). Ennek eléréséhez megjegyzéseket használ. Erre később visszatérünk. De fontos megérteni, hogy a Spring csak egy olyan osztályok és felületek gyűjteménye, amelyek elérhetőek az Ön számára :) Azonnal szeretném megjegyezni, hogy a Spring nem csak webes alkalmazásokhoz használható, hanem a legelterjedtebb konzolprogramokhoz is amelyek olyan ismerősek mindannyiunk számára. És még ma is írunk egyet belőlük. így biztosítva Önnek néhány olyan funkciót, amelyet már megírtak Önnek. De ez nem mindig van így. Például a Spring a lehető legnagyobb mértékben megpróbálja elkerülni az ilyen szoros csatolást (ahol az osztályok közvetlenül függnek a keretrendszer osztályaitól/interfészeitől). Ennek eléréséhez megjegyzéseket használ. Erre később visszatérünk. De fontos megérteni, hogy a Spring csak egy olyan osztályok és felületek gyűjteménye, amelyek elérhetőek az Ön számára :) Azonnal szeretném megjegyezni, hogy a Spring nem csak webes alkalmazásokhoz használható, hanem a legelterjedtebb konzolprogramokhoz is amelyek olyan ismerősek mindannyiunk számára. És még ma is írunk egyet belőlük. így biztosítva Önnek néhány olyan funkciót, amelyet már megírtak Önnek. De ez nem mindig van így. Például a Spring a lehető legnagyobb mértékben megpróbálja elkerülni az ilyen szoros csatolást (ahol az osztályok közvetlenül függnek a keretrendszer osztályaitól/interfészeitől). Ennek eléréséhez megjegyzéseket használ. Erre később visszatérünk. De fontos megérteni, hogy a Spring csak egy olyan osztályok és felületek gyűjteménye, amelyek elérhetőek az Ön számára :) Azonnal szeretném megjegyezni, hogy a Spring nem csak webes alkalmazásokhoz használható, hanem a legelterjedtebb konzolprogramokhoz is amelyek olyan ismerősek mindannyiunk számára. És még ma is írunk egyet belőlük. A Spring a lehető legnagyobb mértékben igyekszik elkerülni az ilyen szoros csatolásokat (ahol az osztályok közvetlenül függenek a keretrendszer osztályaitól/interfészeitől). Ennek eléréséhez megjegyzéseket használ. Erre később visszatérünk. De fontos megérteni, hogy a Spring csak egy olyan osztályok és felületek gyűjteménye, amelyek elérhetőek az Ön számára :) Azonnal szeretném megjegyezni, hogy a Spring nem csak webes alkalmazásokhoz használható, hanem a legelterjedtebb konzolprogramokhoz is amelyek olyan ismerősek mindannyiunk számára. És még ma is írunk egyet belőlük. A Spring a lehető legnagyobb mértékben igyekszik elkerülni az ilyen szoros csatolásokat (ahol az osztályok közvetlenül függenek a keretrendszer osztályaitól/interfészeitől). Ennek eléréséhez megjegyzéseket használ. Erre később visszatérünk. De fontos megérteni, hogy a Spring csak egy olyan osztályok és felületek gyűjteménye, amelyek elérhetőek az Ön számára :) Azonnal szeretném megjegyezni, hogy a Spring nem csak webes alkalmazásokhoz használható, hanem a legelterjedtebb konzolprogramokhoz is amelyek olyan ismerősek mindannyiunk számára. És még ma is írunk egyet belőlük. ) Azt is szeretném rögtön megjegyezni, hogy a Spring nem csak webes alkalmazásokhoz használható, hanem a legelterjedtebb, mindannyiunk számára oly ismerős konzolprogramokhoz is. És még ma is írunk egyet belőlük. ) Azt is szeretném rögtön megjegyezni, hogy a Spring nem csak webes alkalmazásokhoz használható, hanem a legelterjedtebb, mindannyiunk számára oly ismerős konzolprogramokhoz is. És még ma is írunk egyet belőlük.

Szerkezet

De a tavasz nem csak egy bizonyos keret. Inkább ez egy elterjedt elnevezés, amely több kis keretrendszerre utal, amelyek mindegyike saját feladatot lát el. Tavasz a lustáknak Alapítvány, alapfogalmak és példák kóddal.  1-2 rész

https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
2.1. ábra. A tavaszi keret áttekintése

Mint látható, a tavasz moduláris. Ez lehetővé teszi, hogy csak azokat a modulokat csatlakoztassuk, amelyekre szükségünk van az alkalmazásunkhoz, nem pedig azokat, amelyeket nyilvánvalóan nem fogunk használni. Amennyire én tudom, ez a megközelítés tette lehetővé, hogy a Spring felülmúlja akkori versenytársát (EJB), és átvegye a vezetést. Az EJB-t használó alkalmazások sok függőséget húztak maguk mögött, és ennek eredményeként lomhának és lassúnak bizonyultak. A képen látható, hogy a Spring Framework több modulból áll:
  • Adat hozzáférés
  • Web
  • Mag
  • és több
Ma megismerkedünk néhány, a fő modulban található fogalommal: bab, kontextus és mások. Ahogy azt sejteni lehetett, a Data Access modul az adatokkal (főleg adatbázisokkal) való munkavégzéshez tartalmaz eszközöket, a webmodul pedig a hálózaton végzett munkához (beleértve a webalkalmazások létrehozását is, amiről később lesz szó). Ezen kívül van egy átfogó infrastruktúra, amely támogatja a Springet: sok más olyan projekt, amely hivatalosan nem szerepel magában a keretrendszerben, de zökkenőmentesen beépül a tavaszi projektbe (például a Spring Security, amelyet szintén remélem érinteni fogok, a felhasználó hitelesítése egy webhelyen).

Miért van a Java Spring Framework-je?

Nos, amellett, hogy divatos, sima és friss, már most elmondhatom, hogy amint egy kis készségre is szert tesz a Spring használatában, megérti, hogy van mindenféle munka, ami már nincs. tenni, és mennyi munkát vállal magára a tavasz. Írhat néhány tucat sor konfigurációs beállítást és írhat néhány osztályt, és a végén egy működő projektet kap. De amint elkezd azon tűnődni, hogy mennyi cucc van a motorháztető alatt, mennyi munka folyik, és mennyi kódot kellene írnod, ha ugyanazt a projektet sima szervletekre vagy socketekre és tiszta Java-ra építenéd, égnek fog állni a hajad :) A tavaszt még egyfajta varázslatként is leírják. Ezt akkor tapasztalod, amikor látod, hogy minden működik, de van egy hozzávetőleges elképzelésed is arról, hogyan és mennyi munka zajlik a színfalak mögött – tehát úgy tűnik, tényleg van valamiféle varázslat működés közben :) Könnyebb varázslatnak nevezni, mint megpróbálni elmagyarázni, hogy mindez hogyan kapcsolódik egymáshoz. :) A második érv a Spring tanulmányozása mellett az, hogy a junior fejlesztők számára meghirdetett állások hozzávetőlegesen 90%-a (személyes megfigyeléseim alapján) vagy ismeretet igényel, vagy legalább általános elképzelést arról, hogy mi a tavasz.Data, Web MVC, és Securitymodulok kifinomult fejlesztőket kínálnak :) De a mai nap csak az alapokról szól.

DI/IoC

Ha valaha is próbált olvasni a tavaszról, akkor az első dolog, amivel találkozott, valószínűleg a következő rövidítésekkel találkozott: DI/IoC. Most nagyon ajánlom, hogy tartson egy kis szünetet ebben a cikkben, és olvassa el ezt a DZone cikket ! Az IoC a vezérlés inverzióját jelenti. Ezt már mellékesen megemlítettem, amikor azt írtam, hogy a könyvtár használata azt jelenti, hogy a kódban meg kell adnia, hogy melyik metódust melyik objektumon hívja meg, de a keretrendszer használata általában azt jelenti, hogy a keretrendszer a megfelelő időben hívja meg a kódot. Más szóval, ez utóbbi esetben már nem Ön kezeli a kód/program végrehajtásának folyamatát – a keretrendszer ezt elvégzi Ön helyett. Átadta a vezérlést a keretrendszernek (a vezérlés megfordítása). A DI a függőségi injekciót jelenti. A függőségi injektálásnál nem hoz létre macskaobjektumokat a fő módszerrel, majd adja át őket a metódusainak. Ehelyett a tavaszi keretrendszer létrehozza ezeket az Ön számára. Egyszerűen mond valami olyasmit, hogy "szeretnék itt egy macskát", és a keretrendszer átad egyet neked a módszeredben. Ezt a rövidítést a jövőbeni cikkekben fogjuk látni.

Bab és kontextus

A tavasz egyik kulcsfogalma a bab. Valójában ez csak valamilyen osztály tárgya. Tegyük fel, hogy van egy programunk, amelyhez 3 objektum szükséges: egy macska, egy kutya és egy papagáj. És van egy csomó osztályunk egy csomó módszerrel. Néha macskára van szükségünk egy módszerhez, néha kutyára kell egy másik módszerhez, és néha a módszereinkhez kell egy macska és egy papagáj (például a macska etetésének módszere, ha-ha). Más módszerekhez mindhárom objektumra szükség van. Igen, először létrehozhatjuk ezt a három objektumot a fő metódusban, majd átadhatjuk az osztályainknak, majd ezeken az osztályokon belül a megfelelő metódusoknak... És így tovább az egész programon keresztül. De ha azt is feltételezzük, hogy időnként meg akarjuk változtatni metódusaink bemeneti paramétereinek listáját (pl. úgy döntünk, hogy átírunk valamit, vagy új funkciókat adunk hozzá), akkor jó néhány változtatást kell végrehajtanunk a kódon. És most képzeljük el, hogy nem 3, hanem 300 ilyen tárgyunk van. Az egyik alternatíva az, hogy az összes objektumunkat egy listába gyűjtjük (List<Object>), adja át minden metódusnak, majd kapja meg a szükséges objektumot a metódusokon belül. De a program futása közben mi van akkor, ha egy objektum hozzáadódik ehhez a listához, vagy ami még rosszabb, mi van, ha egyet törölnek? Ez feltörhet minden olyan metódust, ahol indexet használunk az objektumok listából való lekéréséhez. A probléma elkerülése érdekében úgy döntünk, hogy objektumainkat nem listában, hanem térképen tároljuk, ahol a kulcs az objektum neve, az érték pedig maga az objektum. Ez lehetővé teszi, hogy lekérjük a szükséges objektumokat egyszerűen a nevük használatával, pl. get("parrot"), és válaszul megkapjuk a papagáj objektumot. Vagy a kulcs lehet az objektum osztálya, az érték pedig maga az objektum. Ebben az esetben ahelyett, hogy megadnánk az objektum nevét, hanem csak megadhatjuk az objektum osztályát, amire szükségünk van. Ez is kényelmes. Vagy akár írhatnánk valamilyen burkolót a térképhez, ahol egyes metódusok a nevük alapján kapnak objektumokat, mások pedig az osztályuk alapján. Amihez eljutottunk, azt analkalmazási kontextusban a tavaszi keretrendszerben. A kontextus babok (objektumok) gyűjteménye. Hozzáférünk egy kontextushoz, hogy megkapjuk a szükséges babot (objektumot) a neve, a típusa vagy más módon. Ezenkívül megkérhetjük magát a tavaszt, hogy keresse meg a saját kontextusában azt a babot, amelyre szükségünk van, és adja át a módszerünknek. Tegyük fel például, hogy van egy ilyen módszerünk:
public void doSomething(Cat cat) {
    ...
}
Amikor Spring elhívta ezt a metódust, kivette a macska objektumunkat a környezetéből, és átadta a metódusnak. De most úgy döntöttünk, hogy a macskán kívül a módszerünkhöz papagáj is kell. Tavasszal mi sem lehet könnyebb! Egyszerűen ezt írjuk:
public void doSomething(Cat cat, Parrot parrot) {
    ...
}
Most, amikor a tavasz meghívja a módszerünket, megérti, hogy át kell adni egy macskát és egy papagájt, ezért a kontextusához megy, megkapja ezt a két objektumot, és átadja őket a mi módszerünknek. Azzal, hogy az irányítást a Springre ruházzuk, átadjuk a felelősséget az objektumok létrehozásáért, és átadjuk azokat módszereinknek, amelyeket a Spring hívni fog. Ez felveti a kérdést: honnan tudja a tavasz, hogy mely tárgyakat (babokat) kell létrehozni?

Egy alkalmazás konfigurálásának módjai

Három fő módja van az alkalmazások konfigurálásának , vagyis a Springnek pontosan megmondható, hogy mely objektumokra van szükségünk:
  1. XML konfigurációs fájlok
  2. Java alapú konfiguráció
  3. automatikus konfiguráció
A tavasz alkotói a következő sorrendben helyezik el őket prioritásként:
  • a legnagyobb prioritású módszer, amelyet előnyben kell részesíteni, az automatikus konfiguráció
  • ha az automatikus konfiguráció nem használható az összes lehetséges bean helyes konfigurálására, használjon Java-alapú konfigurációt (amely magában foglalja az objektumok létrehozását Java kód használatával)
  • és a legalacsonyabb prioritású módszer a régimódi módszer – XML konfigurációs fájlok használatával.
A tavasz lehetővé teszi ezen módszerek kombinálását is. Például hagyja, hogy a Spring konfiguráljon mindent, ami automatikusan konfigurálható, használjon Java-alapú konfigurációt mindenhol, ahol speciális paraméterekre van szüksége, és használja az XML-t minden régebbi konfigurációhoz. Mindez meglehetősen rugalmasan működik. Mégis, ha minden automatikusan konfigurálható, válassza ezt a lehetőséget. Csak az automatikus konfigurációt és a Java alapú konfigurációt fogom figyelembe venni. Az XML-konfigurációkat a Spring szinte minden internetes példájában használják. Sőt, ha már megértette, hogyan működik a Java-alapú konfiguráció, akkor nem lehet gond az XML-fájl olvasásával, amely ugyanezt teszi. Az automatikus konfigurációt akkor használjuk, ha az általunk írt osztályok objektumaival kell dolgoznunk. Ha egy objektumunk létrehozása bizonyos logikát igényel, vagy ha valamilyen osztályt nem tudunk elkészíteni az automatikus konfigurációhoz szükséges annotációval, akkor Java alapú konfigurációval tudjuk megtenni, amit kell. Ban,-benA következő részben létrehozunk egy Maven projektet, összekapcsolunk néhány fő Spring modult, és elkészítjük az első babunkat.
Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései