
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.
https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
Figura 2.1. Prezentare generală a cadrului de primăvară
- Acces la date
- Web
- Miez
- și altele
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 Security
modulele 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:- fișiere de configurare XML
- Configurație bazată pe Java
- configurare automată
- 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.
GO TO FULL VERSION