Inverzija kontrole i ubrizgavanje ovisnosti u Javi / proljeće

Sadržaj
Ovo je četvrti dio niza vodiča usmjerenih na pregled osnovnih tema jezika Java kako bi čitatelja pripremili za korištenje Spring Framework -a. Prvi dio ove serije vodiča možete preuzeti ovdje, drugi dio možete pronaći ovdje, a treći dio ovdje. U ovom ćemo vodiču vidjeti 2 osnovna koncepta s kojima se moramo nositi ako želimo pravilno koristiti Spring: Inverzija kontrole i Ubrizgavanje ovisnosti.
Prije svega, želim pojasniti da je Martin Fowler te pojmove puno bolje objasnio u ovom članku i preveo na španjolski na ovoj stranici, ali namjera mi je pokušati sažeti koncept kako bi bio lako razumljiv i uštedio vam malo čitanja članak (iako ste srdačno pozvani da ga pročitate ako imate još pitanja).
Izraz je relativno nov, ali to je programski uzorak koji seže do onih programa nastalih korištenjem čistog sekvencijalnog programiranja, gdje je jedan programer (ili grupa programera) sjeo da napiše niz koraka ili računske upute koje treba izvršiti savršeno od početka do kraja s namjerom postizanja posljednjeg rezultata.
U to vrijeme (nemojte misliti da je to bilo prije mnogo godina) pozivi metodama i knjižnicama uvijek su dolazili iz središnjeg izvora koji je bio zadužen za manipuliranje svim varijablama u istom programu. Kasnije su razvijena grafička sučelja koja su bila zadužena za upravljanje ulazima podataka u program, dok je glavni tok programa bio zadužen za pružanje rukovatelja za događaje koji su se dogodili na grafičkom sučelju (aktivira nešto pri kliku, pritiskom na ovu tipku , pomicanje miša itd.) dok je sučelje u stalnoj petlji. Na ovaj način kontrola programa je obrnuta, grafičko sučelje zaduženo je za obavještavanje glavnog toka što i kako učiniti, a da ne morate znati KAKO se to radi.
Ako primijetite, sučelja u Javi mogu vam pomoći u prenošenju kontrole nad aplikacijom na vanjske agente, ali koncept je primjenjiv na daemon niti koje čekaju da se dogodi događaj, klasa koja je odgovorna za instanciranje i isporuku implementacija drugih klasa na program (tvornički uzorak) i u biti bilo koji uzorak koji omogućuje prijenos programa nad nekim vanjskim agentom.
To je posebna vrsta Inverzije kontrole u kojoj klasa A ne zna koji će objekt koristiti u trenutku sastavljanja, već zna samo radnje koje mora poduzeti s tim objektom. Pretpostavimo sljedeću klasu (koja se temelji na klasama stvorenim u mom prethodnom vodiču):
 crtač javne klase {javni trg; javni karikaturist () {square = new Square (); } javna void MasterDraw () {square.Draw (); }} 

Kao što ćete vidjeti, ova klasa "Draftsman" u potpunosti ovisi o klasi "Square" budući da je ona zadužena za životni ciklus kvadratnog objekta koji će kasnije koristiti. Ovaj način stvaranja klase "Crtač" vrlo je nepraktičan jer ako bismo kasnije htjeli da Crtač nacrta pravokutnike ili trokute, morali bismo to izmijeniti.
Umjesto toga možemo stvoriti klasu za višekratnu upotrebu ako implementiramo "Drawable" sučelje koje smo stvorili u prethodnom vodiču:
 crtač javne klase {public Drawable drawing; javni crtač (Drawable d) {crtež = d; } javna void MasterDrawing () {crtež.Drawing (); }} 

Na ovaj način objekti klase "Draftsman" ne "kontroliraju" objekt koji moraju nacrtati, već samo znaju da on implementira Drawable sučelje, a kasnije i te "Draftsman" objekte koje ću izraditi u svojoj aplikaciji ili da će netko else ide u aplikaciju koja pristupa mojoj biblioteci objekata, savršeno su sposobni primiti bilo koji objekt koji implementira "Drawable" sučelje.
U prethodnom primjeru primjenjujemo ono što je poznato "Instrukcija konstruktora" budući da se ovisnost ubrizgava na razini konstruktora, ali ovisnost možete unijeti i putem "Postavljača" ili, u drugim programskim jezicima, možete unijeti parametre ili sučelja (U Javi ne možete mijenjati parametre ili sučelja koja prihvaćaju metoda tijekom izvođenja, ali Python, na primjer, dopušta metodama prihvaćanje parametara bez navođenja vrste parametara.)
 crtač javne klase {public Drawable drawing; public void setDrawing (Drawable d) {crtež = d; } javna void MasterDrawing () {crtež.Drawing (); }} 

The injekcija ovisnosti u osnovi omogućuje odvajanje funkcionalnosti vašeg programa. Ta neovisnost vam omogućuje da testirate svoje časove bez (vrijedno ponavljanja) da vaš razred bude vezan za bilo što. Ova neovisnost jedan je od ključnih dijelova za korištenje Proljeće, komponente ovise o okviru, a ne o aplikaciji, možete stvarati objekte koji postoje izvan vaše aplikacije i koristiti ih samo kad vam zatrebaju.
Od sljedećeg vodiča počet ćemo raditi izravno s Springom i vidjet ćete kako su svi koncepti koje smo dosad vidjeli povezani s njegovim djelovanjem te će vam omogućiti da u kratkom vremenu steknete potrebnu stručnost.
Čekam vaše komentare, do sljedećeg puta!Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave