Što je proljetni grah?

1. Pregled

Bean je ključni koncept proljetnog okvira. Kao takvo, razumijevanje ovog pojma presudno je za upoznavanje okvira i njegovu učinkovitu upotrebu.

Nažalost, nema jasnih odgovora na jednostavno pitanje - što je zapravo proljetni grah. Neka objašnjenja idu na tako nisku razinu da se propušta velika slika, dok su neka previše nejasna.

Ovaj će vodič pokušati rasvijetliti temu, počevši od opisa u službenoj dokumentaciji.

2. Definicija graha

Evo definicije graha u dokumentaciji Spring Framework:

U proljeće se objekti koji čine okosnicu vaše aplikacije i kojima upravlja Spring IoC spremnik nazivaju grahom. Bean je objekt koji je instanciran, sastavljen i kojim se inače upravlja Spring IoC spremnikom.

Ova je definicija sažeta i prelazi na poantu, ali promašuje važnu stvar - Spring IoC spremnik. Spustimo se u zečju rupu da vidimo što je to i koje koristi donosi.

3. Inverzija kontrole

Jednostavno rečeno, Inverzija upravljanja ili skraćeno IoC jest postupak u kojem objekt definira svoje ovisnosti bez da ih stvara. Ovaj objekt delegira posao konstrukcije takvih ovisnosti na IoC spremnik.

Počnimo s deklaracijom nekoliko klasa domena prije zaranja u IoC.

3.1. Razredi domena

Pretpostavimo da imamo deklaraciju klase:

tvrtka javne klase {adresa privatne adrese; javno poduzeće (adresa adresa) {this.address = adresa; } // getter, setter i druga svojstva}

Za ovaj razred potreban je suradnik tipa Adresa:

javna klasa Adresa {private String street; privatni int broj; javna adresa (ulica s nizovima, int broj) {this.street = street; this.number = broj; } // geteri i postavljači}

3.2. Tradicionalni pristup

Obično stvaramo objekte s konstruktorima njihovih klasa:

Adresa adresa = nova adresa ("High Street", 1000); Tvrtka tvrtke = nova tvrtka (adresa);

S ovim pristupom nema ništa loše, ali ne bi li bilo lijepo upravljati ovisnostima na bolji način?

Zamislite aplikaciju s desecima ili čak stotinama predavanja. Ponekad želimo podijeliti jedan primjerak klase u cijeloj aplikaciji, drugi put nam treba zasebni objekt za svaki slučaj upotrebe, i tako dalje.

Upravljanje takvim brojem predmeta nije ništa manje od noćne more. Tu dolazi do spašavanja Inverzija kontrole.

Umjesto da samostalno konstruira ovisnosti, objekt može dohvatiti svoje ovisnosti iz IoC spremnika. Sve što trebamo učiniti je osigurati spremniku odgovarajuće konfiguracijske metapodatke.

3.3. Konfiguracija graha

Prvo, ukrasimo Društvo razred s @Komponenta napomena:

@Component public class Company {// ovo je tijelo isto kao i prije}

Evo konfiguracijske klase koja isporučuje metapodatke graha u IoC spremnik:

@Configuration @ComponentScan (basePackageClasses = Company.class) javna klasa Konfiguriranje {@Bean javna adresa getAddress () {return nova adresa ("High Street", 1000); }}

Klasa konfiguracije proizvodi grah tipa Adresa. Također nosi i @ComponentScan napomena koja upućuje spremnik da traži grah u paketu koji sadrži Društvo razred.

Kada Spring IoC spremnik konstruira objekte tih tipova, svi se objekti nazivaju Spring beans jer njima upravlja IoC spremnik.

3.4. IoC u akciji

Budući da smo definirali grah u klasi konfiguracije, trebat će nam instanca AnnotationConfigApplicationContext klasa za izgradnju spremnika:

ApplicationContext context = new AnnotationConfigApplicationContext (Config.class);

Brzi test potvrđuje postojanje kao i vrijednosti svojstava našeg graha:

Tvrtka tvrtke = context.getBean ("tvrtka", Company.class); assertEquals ("High Street", company.getAddress (). getStreet ()); assertEquals (1000, company.getAddress (). getNumber ());

Rezultat dokazuje da je IoC spremnik ispravno stvorio i inicijalizirao grah.

4. Zaključak

Ovaj je vodič dao kratki opis proljetnog graha i njegovog odnosa s IoC spremnikom.

Kompletni izvorni kôd za ovu lekciju možete pronaći na GitHubu.