Programiranje

Kaj je pomlad Komponentni razvoj za Javo

Pomlad je morda najboljši okvir na osnovi komponent, ki se je pojavil na prelomu v 21. stoletje. Izredno izboljšuje način, kako razvijalci pišejo in dostavljajo infrastrukturno kodo v aplikacijah, ki temeljijo na Javi. Od svoje ustanovitve je Spring prepoznan kot vodilni okvir za razvoj Java v podjetju. Kot celovit aplikacijski okvir Spring spominja na nekatere zmožnosti Java EE, vendar ponuja kombinacijo funkcij in programskih pravil, ki jih drugje ne boste našli.

Ta članek predstavlja Spring in njegovo osnovno filozofijo in metodologijo programiranja: Inverzija nadzora in vbrizgavanje odvisnosti. Začeli boste tudi z opombami Spring in nekaj praktičnimi primeri kodiranja.

Vbrizgavanje odvisnosti in inverzija nadzora

Glavna ideja Spring je, da namesto da sami upravljate razmerja med objekti, jih raztovorite v ogrodje. Inverzija nadzora (IOC) je metodologija, ki se uporablja za upravljanje odnosov objektov. Injekcija odvisnosti je mehanizem za izvajanje MOK. Ker sta ta dva koncepta povezana, vendar različna, si jih oglejmo natančneje:

  • Inverzija nadzora (IOC) počne točno to, kar pove že njegovo ime: obrne tradicionalno hierarhijo nadzora za izpolnjevanje objektnih razmerij. Namesto da se zanašamo na aplikacijsko kodo, da določimo, kako se predmeti povezujejo med seboj, odnosi definira ogrodje. IOC kot metodologijo uvaja doslednost in predvidljivost odnosov z objekti, vendar se od vas kot razvijalca odpovedate drobnemu nadzoru.
  • Injekcija odvisnosti (DI) je mehanizem, pri katerem ogrodje "vbrizga" odvisnosti v vašo aplikacijo. To je praktično izvajanje MOK. Vbrizgavanje odvisnosti je odvisno od polimorfizma, v smislu, da omogoča spreminjanje izpolnitve referenčnega tipa glede na konfiguracije v okviru. Okvir vbrizga referenčne spremenljivke, namesto da bi jih ročno izpolnjevali v aplikacijski kodi.

JSR-330

Tako kot v svetu Jave je tisto, kar se je začelo kot divja inovacija Spring, delno prevzela standardna specifikacija. V tem primeru je JSR-330 standard Java. Lepo pri specifikaciji JSR-330 je, da jo lahko uporabljate drugje in jo boste videli drugje, izven pomladi. Uporabite ga lahko brez uporabe Spring. Vendar Pomlad na mizo prinese še veliko več.

Primer # 1: Vbrizgavanje odvisnosti od vzmeti

Inverzijo nadzora in vbrizgavanje odvisnosti je najbolje razumeti z njihovo uporabo, zato bomo začeli s primerom hitrega programiranja.

Recimo, da modelirate avto. Če modelirate v navadni stari Javi, boste morda imeli člana vmesnika na Avto razred za sklicevanje na Motor vmesnik, kot je prikazano v seznamu 1.

Seznam 1. Predmetni odnosi v navadni stari Javi

 javni vmesnik Engine () {...} avtomobil javnega razreda {motor motorja private; public Engine getEngine () {...} public void setEngine (Engine engine) {...}} 

Seznam 1 vsebuje vmesnik za Motor vrsto in razred za beton Avto , ki se sklicuje na Motor. (Upoštevajte, da bi bili v resničnem programskem scenariju v ločenih datotekah.) Ko ustvarjate datoteko Avto Na primer, povezavo bi nastavili, kot je prikazano v seznamu 2.

Seznam 2. Ustvarjanje avtomobila z vmesnikom Engine

 // ... Car newCar = new Car (); Motor sixCylEngine = nov InlineSixCylinderEngine (); newCar.setEngine (sixCylEngine); // Naredite stvari z avtom 

Upoštevajte, da ustvarite Avto najprej objekt. Nato ustvarite nov objekt, ki izpolnjuje Motor in ga ročno dodelite Avto predmet. Tako delujejo asociacije predmetov v navadni stari Javi.

Modeliranje razredov in predmetov spomladi

Zdaj pa si oglejmo isti primer spomladi. Tu lahko naredite nekaj takega, kot je prikazano v seznamu 3. Začnete z Avto razred, vendar mu v tem primeru dodate pripis: @Inject.

Seznam 3. Primer uporabe opombe @Inject spomladi

 javni razred avtomobila {@Inject motor zasebnega motorja; // ...} 

Uporabljati @Inject pripis (oz @Autowired, če želite) pove Spring, naj po kontekstu poišče kontekst in samodejno vbrizga predmet v sklic na podlagi nabora pravil.

Nato razmislite o @Component pripis, prikazan v seznamu 4.

Seznam 4. Pripis @Component

 @Component javni razred InlineSixCylinderEngine implementira Engine {// ...} 

Označevanje predavanja z @Component pove Spring, da je na voljo za izpolnjevanje injekcij. V tem primeru je InlineSixCylEngine bi se vbrizgal, ker je na voljo in izpolnjuje zahteve vmesnika združenja. Spomladi se temu reče "samodejno ožičeno" vbrizgavanje. (Glej spodaj za več o Spring's @Autowired pripis.)

Ločevanje kot načelo oblikovanja

Inverzija nadzora z vbrizgavanjem odvisnosti odstrani vir konkretne odvisnosti iz vaše kode. Nikjer v programu ni trdno kodirane reference Motor izvajanje. To je primer ločevanje kot načelo oblikovanja programske opreme. Ločevanje kode aplikacije od izvedbe olajša upravljanje in vzdrževanje kode. Aplikacija manj ve, kako se njeni deli prilegajo, vendar je veliko lažje spreminjati kadar koli v življenjskem ciklu aplikacije.

@Autowired vs @Inject

@Autowired in @Inject naredi isto. Vendar @Inject je standardni pripis Java, medtem ko @Autowired je značilno za pomlad. Oba služita istemu namenu, da DI motorju pove, naj vbrizga polje ali metodo z ustreznim predmetom. Spomladi jih lahko uporabite.

Pregled pomladnega okvira

Zdaj, ko ste videli nekaj pomladne kode, si oglejmo pregled ogrodja in njegovih komponent. Kot lahko vidite, je ogrodje sestavljeno iz štirih glavnih modulov, ki so razdeljeni na pakete. Pomlad vam omogoča precej prilagodljivosti z moduli, ki jih boste uporabljali.

  • Jedro posode
    • Jedro
    • Fižol
    • Kontekst
    • Jezik izražanja
  • Aspektno usmerjeno programiranje (AOP)
    • AOP
    • Vidiki
    • Instrumentacija
  • Dostop do podatkov in integracija
    • JDBC
    • JPA / ORM
    • JMS
    • Transakcije
  • Splet
    • Splet / POČITEK
    • Servlet
    • Podporniki

Namesto da bi tukaj vse zajeli, začnimo z dvema najpogosteje uporabljenima pomladnima funkcijama.

Zagon novega projekta: Spring Boot

S pomočjo Spring Boot bomo ustvarili primer projekta, ki ga bomo uporabili za predstavitev Spring funkcij. Kot boste videli sami, Spring Boot olajša zagon novih projektov. Za začetek si oglejte glavni razred, prikazan spodaj. V Spring Boot lahko vzamemo glavni razred z a glavni () in nato izberite, da ga zaženete samostojno ali pa paket za razmestitev v vsebniku, kot je Tomcat.

Seznam 5 ima obrise našega glavnega razreda, ki bo živel po standardu src / main / java / hello lokacijo.

Seznam 5. Glavni razred s Spring Boot

 paket pozdrav; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication javni razred Application {public static void main (String [] args) {SpringApplication.run (Application.class, args); }} 

Upoštevajte dve stvari glede zgornje kode: Najprej je vse delo povzeto v ogrodje. Glavni razred zažene aplikacijo, vendar ne ve ničesar o tem, kako aplikacija deluje ali zagotavlja svojo funkcionalnost. Drugič, SpringApplication.run () dejansko opravi zagon aplikacije in prenos v Uporaba razred sam. Ponovno delo, ki ga opravlja aplikacija, tukaj ni očitno.

The @SpringBootApplication anotacija zaokroži nekaj standardnih opomb in pomladi sporoči, naj pogleda paket, kjer obstaja glavni razred komponent. V našem prejšnjem primeru bi z avtomobilom in motorjem Spring lahko našel vse razrede, označene s @Component in @Inject. Sam postopek, imenovan skeniranje komponent, je zelo prilagodljiv.

Aplikacijo lahko sestavite s standardom mvn čista namestitev, in ga lahko zaženete s ciljem Spring Boot (mvn spring-boot: zaženi). Pred tem poglejmo to aplikacijo pom.xml mapa.

Seznam 6. Začetnik pom.xml

 com.javaworld what-is-spring 1.0.0 org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE 1.8 org.springframework.boot spring-boot-maven-plugin 

V zgornji kodi upoštevajte dve pomembni lastnosti:

  1. The starš element temelji na spring-boot-starter-starš projekt. Ta nadrejeni projekt definira številne uporabne privzete vrednosti, na primer privzeto raven prevajalnika JDK 1.8. Večinoma lahko samo zaupate, da ve, kaj počne. Kot primer lahko izpustite številko različice za številne pogoste odvisnosti in SpringBootParent bo določil združljivosti različic. Ko nataknete številko različice starša, se spremenijo tudi različice odvisnosti in privzete vrednosti.
  2. The spring-boot-maven-plugin omogoča izvedljivo embalažo JAR / WAR in jo namestite na svoje mesto teči (prek mvn spring-boot: zaženi ukaz).

Dodajanje Spring Web-a kot odvisnosti

Do zdaj smo lahko uporabljali vzmetni čevelj da omejimo, koliko dela bomo vložili za zagon in delovanje aplikacije. Zdaj pa dodajte odvisnost in poglejmo, kako hitro lahko nekaj dobimo v brskalniku.

Seznam 7. Dodajanje Spring Web-a projektu

  org.springframework.boot spring-boot-starter-web 

Opomba

Spring bo samodejno zaznal, katere datoteke so se spremenile, in jih ustrezno prevedel. Lahko samo izvršite mvn spring-boot: zaženi do sprememb prevzema.

Zdaj, ko imamo osnovno nastavitev projekta, smo pripravljeni na naša dva primera.

2. primer: Izdelava RESTful končnih točk z Spring Web

Uporabili smo spring-boot-starter-web prinesti več odvisnosti, ki so koristne za izdelavo spletnih aplikacij. Nato bomo ustvarili obdelovalec poti za pot URL-ja. Spletna podpora Spring je del modula Spring MVC (Model-View-Controller), vendar naj vas to ne skrbi: Spring Web ima tudi popolno in učinkovito podporo za gradnjo RESTful končnih točk.

Razred, katerega naloga je pošiljanje zahtev za URL, je znan kot krmilnik, kot je prikazano na seznamu 8.

Seznam 8. Pomladni krmilnik MVC REST

 paket pozdrav; uvoz org.springframework.stereotype.Controller; uvoz org.springframework.ui.Model; uvoz org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; uvoz org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestParam; Javni razred @Controller GreetingController {@RequestMapping (value = "/ hi", method = RequestMethod.GET) javni niz hi (@RequestParam (name = "name", required = false, defaultValue = "JavaWorld") Ime niza, model modela ) {vrni "Pozdravljeni" + ime; }} 

Pripis @Controller

The @Controller pripis označuje razred kot krmilnik. Razred, označen kot krmilnik, se samodejno prepozna tudi kot razred komponent, zaradi česar je kandidat za samodejno ožičenje. Kjer koli je ta krmilnik potreben, bo priključen na ogrodje. V tem primeru ga bomo vključili v sistem MVC za obdelavo zahtev.

Krmilnik je posebna vrsta komponent. Podpira @RequestMapping in @ResponseBody pripombe, ki jih vidite na živjo () metoda. Ti pripisi prikazujejo ogrodju, kako preslikati zahteve za URL v aplikacijo.

Na tej točki lahko aplikacijo zaženete z mvn spring-boot: zaženi. Ko pritisnete / živjo URL, boste dobili odgovor, kot je "Pozdravljeni, JavaWorld."

Opazite, kako je Spring sprejel osnove samodejnega ožičenja komponent in ustvaril celoten spletni okvir. S pomladjo vam ni treba izrecno ničesar povezovati!

Pripisi @Request

The @RequestMapping vam omogoča, da določite vodnik za pot URL-ja. Možnosti vključujejo določitev želene metode HTTP, kar smo v tem primeru storili. Odhod RequestMethod off bi programu naročil, naj obravnava vse vrste metod HTTP.

The @RequestParam pripis argumenta nam omogoča preslikavo parametrov zahteve neposredno v podpis metode, vključno z zahtevami za določene parametre in definiranjem privzetih vrednosti, kot smo to storili tukaj. Telo zahteve lahko celo preslikamo v razred z @RequestBody pripis argumenta.

Odziv REST in JSON

Če ustvarjate končno točko REST in želite vrniti JSON iz metode, jo lahko označite z @ResponseBody. Odziv bo nato samodejno zapakiran v obliki JSON. V tem primeru boste vrnili predmet iz metode.

Uporaba MVC s Spring Web

Podobno kot Struts tudi modul Spring Web lahko enostavno uporabite za resnično nastavitev krmilnika model-view-view. V tem primeru bi vrnili preslikavo v danem predloškem jeziku (na primer Thymeleaf), Spring pa bi razrešil preslikavo, zagotovil model, ki mu ga posredujete, in upodobil odgovor.

3. primer: Pomlad z JDBC

Zdaj pa naredimo nekaj bolj zanimivega z našim upravljalcem zahtev: vrnimo nekaj podatkov iz baze podatkov. Za namen tega primera bomo uporabili bazo podatkov H2. Na srečo Spring Boot podpira vgrajeno pomnilniško bazo podatkov H2.

$config[zx-auto] not found$config[zx-overlay] not found