CodeGym/Blog Java/Aleatoriu/Spring for lazy people Foundation, concepte de bază și ex...
John Squirrels
Nivel
San Francisco

Spring for lazy people Foundation, concepte de bază și exemple cu cod. Partea 1

Publicat în grup
Spring for lazy people Foundation, concepte de bază și exemple cu cod.  Partea 1 - 1În acest articol, nu vă voi spune cum să puneți în funcțiune un proiect Spring funcțional în 5 minute folosind codul meu. Voi scrie doar elementele de bază - lucruri pe care ați putea să nu le cunoașteți și să creați în continuare un proiect. Dar în acest articol, tot nu vei înțelege ce se întâmplă și, mai important, de ce.

Ce este Cadrul de primăvară?

Spring Framework, sau pur și simplu Spring, este unul dintre cele mai populare cadre pentru crearea de aplicații web în Java. Un cadru este ca o bibliotecă (poate că ești mai familiarizat cu acest termen), dar este ceva de luat în considerare. Aproximativ vorbind, atunci când utilizați o bibliotecă, pur și simplu creați instanțe ale claselor pe care le conține, apelați metodele de care aveți nevoie și obțineți astfel rezultatul de care aveți nevoie. Cu alte cuvinte, aceasta este o abordare mai imperativă: în programul dvs., indicați în mod explicit momentul specific când trebuie să creați ce obiect, când să apelați ce metodă specifică etc. Cu cadrele, lucrurile sunt ușor diferite. Pur și simplu scrieți câteva clase ale dvs. și scrieți ceva logică în ele, dar apoi cadrul în sine creează instanțe ale claselor dvs. și le numește metodele. Clasele dvs. implementează de obicei unele interfețe din cadru sau moștenesc unele dintre clasele acestuia, oferindu-vă astfel o anumită funcționalitate care a fost deja scrisă pentru dvs. Dar acest lucru nu este întotdeauna cazul. De exemplu, Spring încearcă pe cât posibil să evite o astfel de cuplare strânsă (unde clasele dvs. depind direct de clase/interfețe din cadru). Utilizează adnotări pentru a realiza acest lucru. Vom reveni la asta mai târziu. Dar este important să înțelegeți că Spring este doar o colecție de clase și interfețe care vă sunt disponibile pentru utilizare :) De asemenea, vreau să remarc imediat că Spring poate fi folosit nu numai pentru aplicații web, ci și pentru cele mai comune programe de consolă. care ne sunt atât de familiare tuturor. Și chiar o să scriem una dintre ele astăzi. oferindu-ți astfel o anumită funcționalitate care a fost deja scrisă pentru tine. Dar acest lucru nu este întotdeauna cazul. De exemplu, Spring încearcă pe cât posibil să evite o astfel de cuplare strânsă (unde clasele dvs. depind direct de clase/interfețe din cadru). Utilizează adnotări pentru a realiza acest lucru. Vom reveni la asta mai târziu. Dar este important să înțelegeți că Spring este doar o colecție de clase și interfețe care vă sunt disponibile pentru utilizare :) De asemenea, vreau să remarc imediat că Spring poate fi folosit nu numai pentru aplicații web, ci și pentru cele mai comune programe de consolă. care ne sunt atât de familiare tuturor. Și chiar o să scriem una dintre ele astăzi. oferindu-ți astfel o anumită funcționalitate care a fost deja scrisă pentru tine. Dar acest lucru nu este întotdeauna cazul. De exemplu, Spring încearcă pe cât posibil să evite o astfel de cuplare strânsă (unde clasele dvs. depind direct de clase/interfețe din cadru). Utilizează adnotări pentru a realiza acest lucru. Vom reveni la asta mai târziu. Dar este important să înțelegeți că Spring este doar o colecție de clase și interfețe care vă sunt disponibile pentru utilizare :) De asemenea, vreau să remarc imediat că Spring poate fi folosit nu numai pentru aplicații web, ci și pentru cele mai comune programe de consolă. care ne sunt atât de familiare tuturor. Și chiar o să scriem una dintre ele astăzi. Spring încearcă pe cât posibil să evite o astfel de cuplare strânsă (unde clasele dvs. depind direct de clase/interfețe din cadru). Utilizează adnotări pentru a realiza acest lucru. Vom reveni la asta mai târziu. Dar este important să înțelegeți că Spring este doar o colecție de clase și interfețe care vă sunt disponibile pentru utilizare :) De asemenea, vreau să remarc imediat că Spring poate fi folosit nu numai pentru aplicații web, ci și pentru cele mai comune programe de consolă. care ne sunt atât de familiare tuturor. Și chiar o să scriem una dintre ele astăzi. Spring încearcă pe cât posibil să evite o astfel de cuplare strânsă (unde clasele dvs. depind direct de clase/interfețe din cadru). Utilizează adnotări pentru a realiza acest lucru. Vom reveni la asta mai târziu. Dar este important să înțelegeți că Spring este doar o colecție de clase și interfețe care vă sunt disponibile pentru utilizare :) De asemenea, vreau să remarc imediat că Spring poate fi folosit nu numai pentru aplicații web, ci și pentru cele mai comune programe de consolă. care ne sunt atât de familiare tuturor. Și chiar o să scriem una dintre ele astăzi. ) De asemenea, vreau să remarc imediat că Spring poate fi folosit nu numai pentru aplicații web, ci și pentru cele mai comune programe de consolă care ne sunt atât de familiare tuturor. Și chiar o să scriem una dintre ele astăzi. ) De asemenea, vreau să remarc imediat că Spring poate fi folosit nu numai pentru aplicații web, ci și pentru cele mai comune programe de consolă care ne sunt atât de familiare tuturor. Și chiar o să scriem una dintre ele astăzi.

Structura

Dar primăvara nu este doar un cadru anume. Mai degrabă, este un nume comun folosit pentru a se referi la mai multe cadre mici, fiecare dintre ele își face propriul fel de activitate. Spring for lazy people Foundation, concepte de bază și exemple cu cod.  Partea 1 - 2

https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
Figura 2.1. Prezentare generală a cadrului de primăvară

După cum puteți vedea, Spring este modular. Acest lucru ne permite să conectăm doar modulele de care avem nevoie pentru aplicația noastră și nu să le conectăm pe cele pe care, evident, nu le vom folosi. Din câte știu, această abordare a permis lui Spring să-și depășească concurentul de atunci (EJB) și să preia conducerea. Aplicațiile care foloseau EJB au tras în spate o mulțime de dependențe și, ca urmare, s-au dovedit a fi lente și lente. Imaginea arată că Spring Framework constă din mai multe module:
  • Acces la date
  • Web
  • Miez
  • și altele
Astăzi ne vom familiariza cu câteva concepte găsite în modulul principal: fasole, context și altele. După cum probabil ați ghicit, modulul Data Access conține instrumente pentru lucrul cu date (în principal baze de date), iar modulul Web este pentru lucrul într-o rețea (inclusiv crearea de aplicații web, care va fi discutată mai târziu). În plus, există o infrastructură cuprinzătoare care susține Spring: multe alte proiecte care nu sunt incluse oficial în cadrul propriu-zis, dar sunt integrate perfect în proiectul tău Spring (de exemplu, Spring Security, despre care sper să abordez, de asemenea, este pentru autentificarea unui utilizator pe un site web).

De ce are Java Spring Framework?

Ei bine, pe lângă faptul că este la modă, elegant și proaspăt, pot spune chiar acum că, de îndată ce vei dobândi chiar și o cantitate mică de abilitate folosind Spring, vei înțelege cum există tot felul de muncă pe care nu le mai ai. de făcut și câtă muncă ia primăvara asupra sa. Puteți scrie câteva zeci de rânduri de setări de configurare și puteți scrie câteva clase și ajungeți cu un proiect de lucru. Dar de îndată ce începi să te întrebi câte lucruri se află sub capotă, câtă muncă se face și cât de mult cod ar trebui să scrii dacă ai implementa același proiect bazat pe servlet-uri sau socket-uri simple și Java pur, parul tau va sta pe cap :) Primavara este chiar descrisa ca un fel de magie. Experimentați asta când vedeți că totul funcționează, dar ai și o idee aproximativă despre cum și cât de multă muncă se întâmplă în culise — așa că se pare că există într-adevăr un fel de magie în acțiune :) Este mai ușor să o numești magie decât să încerci să explici cum sunt toate interconectate. :) Al doilea argument în favoarea studierii Spring este că aproximativ 90% din locurile de muncă deschise pentru dezvoltatorii juniori (pe baza observațiilor mele personale) necesită fie cunoașterea, fie cel puțin o idee generală despre ceea ce Spring'sData, Web MVC, și Securitymodulele oferă dezvoltatori sofisticați :) Dar astăzi este doar despre elementele de bază.

DI/IoC

Dacă ați încercat vreodată să citiți despre primăvară, atunci primul lucru pe care l-ați întâlnit au fost probabil aceste acronime: DI/IoC. Acum vă recomand cu căldură să faceți o pauză de la acest articol și să citiți acest articol DZone ! IoC înseamnă inversarea controlului. Am menționat deja acest lucru în treacăt când am scris că folosirea unei biblioteci presupune să indicați în codul dvs. ce metodă să apelați pe ce obiect, dar că folosirea unui cadru înseamnă, în general, că framework-ul vă va apela codul la momentul potrivit. Cu alte cuvinte, în acest ultim caz, nu mai gestionați procesul de execuție a codului/programului - cadrul face acest lucru pentru dvs. Ați trecut controlul cadrului (inversarea controlului). DI înseamnă injecție de dependență. Cu injecția de dependență, nu creați obiecte cat în metoda principală și apoi le treceți la metodele dvs. În schimb, Spring Framework le creează pentru tine. Pur și simplu spui ceva de genul „Vreau să iau o pisică aici” și cadrul îți transmite una în metoda ta. Vom vedea această abreviere în articolele viitoare.

Fasole și context

Unul dintre conceptele cheie în primăvară este fasolea. De fapt, acesta este doar un obiect al unei clase. Să presupunem că avem un program care necesită 3 obiecte: o pisică, un câine și un papagal. Și avem o grămadă de clase cu o grămadă de metode. Uneori avem nevoie de o pisică pentru o metodă, alteori avem nevoie de un câine pentru o altă metodă, iar uneori metodele noastre au nevoie atât de o pisică, cât și de un papagal (de exemplu, metoda de hrănire a pisicii, ha-ha). Pentru alte metode, sunt necesare toate cele trei obiecte. Da, am putea mai întâi să creăm aceste trei obiecte în metoda principală, apoi să le transmitem claselor noastre, apoi în cadrul acestor clase să le trecem la metodele relevante... Și așa mai departe pe tot parcursul programului. Dar dacă presupunem, de asemenea, că vrem ocazional să schimbăm lista parametrilor de intrare pentru metodele noastre (de exemplu, decidem să rescriem ceva sau să adăugăm o nouă funcționalitate), atunci va trebui să facem destul de multe modificări codului. Și acum imaginați-vă că nu avem 3, ci 300 de astfel de obiecte. O alternativă ar fi să ne adunăm toate obiectele într-o singură listă (List<Object>), transmiteți-l fiecărei metode și apoi obțineți obiectul necesar în interiorul metodelor. Dar pe măsură ce programul rulează, ce se întâmplă dacă un obiect este adăugat la această listă sau, mai rău, dacă unul este șters? Acest lucru are potențialul de a sparge fiecare metodă în care folosim un index pentru a obține obiecte din listă. Pentru a evita această problemă, decidem să stocăm obiectele noastre nu într-o listă, ci într-o hartă, unde cheia este numele obiectului și valoarea este obiectul însuși. Acest lucru ne permite să recuperăm obiectele de care avem nevoie pur și simplu folosind numele lor, de exemplu, get(„papagal”), iar ca răspuns obținem obiectul papagal. Sau cheia ar putea fi clasa obiectului, iar valoarea ar putea fi obiectul însuși. În acest caz, mai degrabă decât să specificăm numele obiectului, dar putem specifica doar clasa obiectului de care avem nevoie. Este, de asemenea, convenabil. Sau am putea chiar să scriem un fel de wrapper pentru hartă, în care unele metode primesc obiecte după numele lor, iar alte metode obțin obiecte după clasa lor. Ceea ce am ajuns aici se numește ancontext de aplicare în cadrul Spring Framework. Un context este o colecție de fasole (obiecte). Accesăm un context pentru a obține fasolea (obiectul) de care avem nevoie după numele său, după tipul său sau prin alte mijloace. În plus, îi putem cere lui Spring să caute în propriul său context bobul de care avem nevoie și să-l transmită metodei noastre. De exemplu, să presupunem că avem o metodă ca aceasta:
public void doSomething(Cat cat) {
    ...
}
Când Spring a numit această metodă, a luat obiectul pisicii noastre din contextul său și l-a transmis metodei. Dar acum am decis că, pe lângă o pisică, metoda noastră are nevoie și de un papagal. Cu primăvara, nimic nu poate fi mai ușor! Pur și simplu scriem:
public void doSomething(Cat cat, Parrot parrot) {
    ...
}
Acum, când Spring numește metoda noastră, înțelege necesitatea de a trece o pisică și un papagal, așa că merge la contextul său, obține aceste două obiecte și le transmite metodei noastre. Transferând frâiele controlului către Spring, transferăm și responsabilitatea pentru crearea obiectelor și trecerea lor către metodele noastre, pe care Spring le va apela. Aceasta ridică întrebarea: de unde știe Spring ce obiecte (fasole) să creeze?

Modalități de configurare a unei aplicații

Există trei moduri principale de a configura o aplicație , adică modalități de a-i spune lui Spring exact de ce obiecte avem nevoie:
  1. fișiere de configurare XML
  2. Configurație bazată pe Java
  3. configurare automată
Creatorii lui Spring le acordă prioritate în această ordine:
  • metoda cu prioritate maximă, care ar trebui să fie preferată, este configurarea automată
  • dacă configurația automată nu poate fi utilizată pentru a configura corect toate bean-urile posibile, utilizați configurația bazată pe Java (care implică crearea de obiecte folosind cod Java)
  • iar metoda cu cea mai mică prioritate este metoda de modă veche - folosind fișiere de configurare XML.
De asemenea, primăvara ne permite să combinăm aceste metode. De exemplu, lăsați Spring să configureze tot ceea ce poate fi configurat automat, să folosească configurația bazată pe Java oriunde aveți nevoie de parametri speciali și să folosească XML pentru toate configurațiile vechi. Toate acestea sunt destul de flexibile. Totuși, dacă totul poate fi configurat automat, alegeți acea opțiune. Voi lua în considerare doar configurația automată și configurarea bazată pe Java. Configurațiile XML sunt folosite în aproape fiecare exemplu de Spring pe Internet. În plus, odată ce înțelegi cum funcționează configurația bazată pe Java, nu ar trebui să ai nicio problemă să citești un fișier XML care face același lucru. Configurarea automată este folosită atunci când trebuie să lucrăm cu obiecte din clasele pe care le-am scris. Dacă crearea unuia dintre obiectele noastre necesită o logică foarte specifică, sau dacă nu putem face o clasă cu adnotarea necesară pentru configurarea automată, atunci putem folosi configurația bazată pe Java pentru a face ceea ce trebuie făcut. Înurmătoarea parte , vom crea un proiect Maven, vom conecta câteva dintre modulele Spring principale și vom crea primele noastre fasole.
Comentarii
  • Popular
  • Nou
  • Vechi
Trebuie să fii conectat pentru a lăsa un comentariu
Această pagină nu are încă niciun comentariu