Pavasaris, iespējams, ir labākais no komponentiem balstītajiem ietvariem, kas parādījās 21. gadsimta mijā. Tas ievērojami uzlabo veidu, kā izstrādātāji raksta un piegādā infrastruktūras kodu Java balstītās lietojumprogrammās. Kopš tās pirmsākumiem Spring ir atzīts par vadošo sistēmu Java Java attīstībai. Kā end-to-end lietojumprogrammu ietvars Spring atspoguļo dažas Java EE iespējas, taču piedāvā dažādu funkciju un programmēšanas konvenciju kombināciju, kuras neatradīsit citur.
Šis raksts iepazīstina ar pavasari un tā pamatprogrammēšanas filozofiju un metodiku: Vadības inversija un atkarības ievadīšana. Jūs arī sāksit ar pavasara anotācijām un pāris praktiskiem kodēšanas piemēriem.
Atkarības ievadīšana un vadības inversija
Pavasara galvenā ideja ir tā, ka tā vietā, lai pats pārvaldītu objektu attiecības, jūs tos pārslogojat sistēmā. Vadības inversija (IOC) ir metodika, ko izmanto objektu attiecību pārvaldībai. Atkarības injekcija ir SOK ieviešanas mehānisms. Tā kā šie divi jēdzieni ir saistīti, bet atšķirīgi, aplūkosim tos tuvāk:
- Vadības inversija (IOC) dara tikai to, ko saka tās nosaukums: tas apgriež tradicionālo vadības hierarhiju objektu attiecību izpildei. Tā vietā, lai paļautos uz lietojumprogrammas kodu, lai noteiktu, kā objekti savstarpēji saistīti, attiecības nosaka ietvars. Kā metodoloģiju SOK ievieš objektu attiecību konsekvenci un paredzamību, taču tas prasa, lai jūs kā izstrādātājs atteiktos no detalizētas kontroles.
- Atkarības injekcija (DI) ir mehānisms, kurā ietvars "iepludina" atkarības jūsu lietotnē. Tā ir SOK praktiskā ieviešana. Atkarības iesmidzināšana ir atkarīga no polimorfisma tādā nozīmē, ka tā ļauj mainīt atsauces tipu, pamatojoties uz struktūras konfigurācijām. Sistēma injicē mainīgas atsauces, nevis tos manuāli izpilda lietojumprogrammas kodā.
JSR-330
Līdzīgi kā Java pasaulē, to, kas sākās kā savvaļas jaunievedums, Spring, daļēji absorbēja standarta specifikācijas. Šajā gadījumā JSR-330 ir Java standarts. Jaukā JSR-330 specifikācija ir tā, ka jūs to varat izmantot citur un redzēsiet, ka tas tiks izmantots citur, ārpus pavasara. To var izmantot, neizmantojot Spring. Tomēr pavasaris galdā ienes vēl daudz vairāk.
1. piemērs: Pavasara atkarības injekcija
Vadības inversiju un atkarības injicēšanu vislabāk var saprast, izmantojot tās, tāpēc sāksim ar ātru programmēšanas piemēru.
Pieņemsim, ka jūs modelējat automašīnu. Ja jūs modelējat vienkāršā vecajā Java, jums, iespējams, ir saskarnes loceklis Automašīna
klase atsaucei uz Dzinējs
saskarni, kā parādīts 1. sarakstā.
Saraksts 1. Objektu attiecības vienkāršā vecajā Java
publiskās saskarnes dzinējs () {...} publiskās klases automobilis {privātā dzinēja motors; public Engine getEngine () {...} public void setEngine (Dzinēja motors) {...}}
1. sarakstā ir interfeiss Dzinējs
tips un klase betonam Automašīna
tips, kas atsaucas uz Dzinējs
. (Ņemiet vērā, ka reālā programmēšanas scenārijā tie būtu atsevišķos failos.) Tagad, kad veidojat Automašīna
Piemēram, jūs iestatījāt asociāciju, kā parādīts 2. sarakstā.
Saraksts 2. Automašīnas izveide ar motora saskarni
// ... Automašīna newCar = jauna automašīna (); Dzinējs sixCylEngine = jauns InlineSixCylinderEngine (); newCar.setEngine (sixCylEngine); // Dariet lietas ar automašīnu
Ņemiet vērā, ka jūs izveidojat Automašīna
objekts vispirms. Pēc tam jūs izveidojat jaunu objektu, kas atbilst Dzinējs
interfeisu un manuāli piešķiriet to Automašīna
objekts. Tā objektu asociācijas darbojas vienkāršā vecajā Java.
Klases un objektu modelēšana pavasarī
Tagad aplūkosim to pašu piemēru pavasarī. Šeit jūs varētu darīt kaut ko līdzīgu tam, kas parādīts 3. sarakstā. Jūs sākat ar Automašīna
klases, bet šajā gadījumā jūs tam pievienojat anotāciju: @ Injicēt
.
Saraksts 3. Piemērs @Inject anotācijas izmantošanai pavasarī
publiskās klases automašīnas {@Inject private Engine engine; // ...}
Izmantojot @ Injicēt
anotācija (vai @Autowired
, ja vēlaties) liek Pavasarim meklēt kontekstu un automātiski ievadīt objektu atsaucē, pamatojoties uz noteikumu kopumu.
Pēc tam apsveriet @Komponents
anotācija, parādīta 4. sarakstā.
4. saraksts. Komponenta anotācija
@Component public class InlineSixCylinderEngine ievieš motoru {// ...}
Anotējot klasi ar @Komponents
pavasarī stāsta, ka tas ir pieejams injekciju veikšanai. Šajā gadījumā InlineSixCylEngine
tiks injicēts, jo tas ir pieejams un atbilst asociācijas saskarnes prasībām. Pavasarī to sauc par "automātisko" injekciju. (Plašāku informāciju par pavasari skatiet zemāk @Autowired
anotācija.)
Atdalīšana kā dizaina princips
Vadības inversija ar atkarības injekciju noņem jūsu koda konkrētas atkarības avotu. Nekur programmā nav stingri kodētas atsauces uz Dzinējs
ieviešana. Šis ir piemērs atsaistīšana kā programmatūras projektēšanas principu. Atvienojot lietojumprogrammas kodu no ieviešanas, kodu ir vieglāk pārvaldīt un uzturēt. Lietojumprogramma zina mazāk par to daļu saderību, taču ir daudz vieglāk veikt izmaiņas jebkurā lietojumprogrammas dzīves cikla brīdī.
@Autowired vs @Inject
@Autowired
un @ Injicēt
dari to pašu. Tomēr @ Injicēt
ir Java standarta anotācija, turpretī @Autowired
ir raksturīgs pavasarim. Viņiem abiem ir viens un tas pats mērķis - pateikt DI dzinējam injicēt lauku vai metodi ar atbilstošu objektu. Varat izmantot vienu no tām pavasarī.
Pavasara ietvara pārskats
Tagad, kad esat redzējis pavasara kodu, apskatīsim ietvaru un tā komponentus. Kā redzat, ietvars sastāv no četriem galvenajiem moduļiem, kas ir sadalīti paketēs. Pavasaris dod jums pietiekami daudz elastības ar izmantotajiem moduļiem.
- Galvenais konteiners
- Kodols
- Pupa
- Konteksts
- Izteiksmes valoda
- Uz aspektu orientēta programmēšana (AOP)
- AOP
- Aspekti
- Instrumentācija
- Piekļuve datiem un integrācija
- JDBC
- APA / ORM
- JMS
- Darījumi
- Web
- Tīmeklis / ATPŪTA
- Servlet
- Statņi
Tā vietā, lai šeit aplūkotu visu, sāksim ar divām no biežāk izmantotajām pavasara funkcijām.
Sākt jaunu projektu: Spring Boot
Mēs izmantosim Spring Boot, lai izveidotu projekta piemēru, kuru izmantosim, lai demonstrētu Spring funkcijas. Pavasara sāknēšana ievērojami atvieglo jaunu projektu sākšanu, kā jūs pats redzēsiet. Lai sāktu, ieskatieties zemāk redzamajā galvenajā klasē. Pavasara zābakā mēs varam uzņemt galveno klasi ar a galvenais ()
metodi un pēc tam izvēlieties palaist to atsevišķi vai pakotni izvietošanai tādā konteinerā kā Tomcat.
5. sarakstā ir mūsu galvenās klases aprises, kas dzīvos atbilstoši standartam src / main / java / sveiki
atrašanās vieta.
Saraksts 5. Galvenā klase ar Spring Boot
paka sveiki; importēt org.springframework.boot.SpringApplication; importēt org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}
Ievērojiet divas lietas par iepriekš minēto kodu: Pirmkārt, viss darbs tiek abstrakts sistēmā. Galvenā klase sāk lietotni, taču tā neko nezina par lietotnes darbību vai funkcionalitāti. Otrkārt, SpringApplication.run ()
veic faktisko darbu, palaižot lietotni un nododot Pieteikums
klase pati. Atkal darbs, ko veic lietotne, šeit nav redzams.
The @SpringBootApplication
anotācija apkopo dažas standarta anotācijas un liek Springam apskatīt paketi, kur komponentiem pastāv galvenā klase. Mūsu iepriekšējā piemērā ar automašīnu un dzinēju tas ļautu Springam atrast visas klases, kurās ir anotācija @Komponents
un @ Injicēt
. Pats process, saukts komponentu skenēšana, ir ļoti pielāgojama.
Lietotni var izveidot, izmantojot standartu mvn tīra instalēšana
, un jūs varat to palaist ar Spring Boot mērķi (mvn spring-boot: palaist
). Pirms to izdarīt, apskatīsim šo lietojumprogrammu pom.xml
failu.
Saraksts 6. Sākuma 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
Ievērojiet divas svarīgas iezīmes iepriekš minētajā kodā:
- The
vecāks
elements paļaujas uzpavasaris-boot-starter-vecāks
projektu. Šajā vecāku projektā ir definēti vairāki noderīgi noklusējumi, piemēram, JDK 1.8 noklusējuma kompilatora līmenis. Lielākoties jūs varat vienkārši paļauties, ka tā zina, ko dara. Piemēram, jūs varat izlaist versijas numuru daudzām izplatītākajām atkarībām unSpringBootParent
iestatīs versijas kā saderīgas. Atsākot vecāku versijas numuru, mainīsies arī atkarības versijas un noklusējumi. - The
pavasaris-boot-maven-spraudnis
ļauj izpildāmo JAR / WAR iepakojumu un to ievietot vietāpalaist
(caurmvn spring-boot: palaist
komandu).
Pievienojot pavasara tīmekli kā atkarību
Līdz šim mēs esam varējuši izmantot atsperes zābaks
lai ierobežotu, cik daudz darba mēs ieguldījām, lai sāktu darboties lietotne. Tagad pievienosim atkarību un redzēsim, cik ātri mēs varam kaut ko iegūt pārlūkprogrammā.
Uzskaitījums 7. Pavasara tīmekļa pievienošana projektam
org.springframework.boot spring-boot-starter-web
Piezīme
Pavasaris automātiski noteiks, kādi faili ir mainīti, un attiecīgi apkopos. Jūs varat vienkārši izpildīt mvn spring-boot: palaist
lai saņemtu izmaiņas.
Tagad, kad esam ieguvuši pamata projekta iestatīšanu, mēs esam gatavi mūsu diviem piemēriem.
2. piemērs: RESTful galapunktu veidošana, izmantojot pavasara tīmekli
Mēs esam izmantojuši pavasaris-boot-starter-web
ieviest vairākas atkarības, kas ir noderīgas tīmekļa lietojumprogrammu veidošanai. Tālāk mēs izveidosim maršruta apstrādātāju URL ceļam. Pavasara tīmekļa atbalsts ir daļa no pavasara MVC (Model-View-Controller) moduļa, taču neļaujiet tam uztraukties: Spring Web ir arī pilnīgs un efektīvs atbalsts RESTful galapunktu izveidošanai.
Klase, kuras uzdevums ir aizpildīt URL pieprasījumus, ir pazīstama kā a kontrolieris, kā parādīts 8. sarakstā.
Saraksts 8. Pavasara MVC REST kontrolieris
paka sveiki; importēt org.springframework.stereotype.Controller; importēt org.springframework.ui.Model; importēt org.springframework.web.bind.annotation.RequestMapping; importēt org.springframework.web.bind.annotation.RequestMethod; importēt org.springframework.web.bind.annotation.ResponseBody; importēt org.springframework.web.bind.annotation.RequestParam; @Controller public class GreetingController {@RequestMapping (value = "/ hi", method = RequestMethod.GET) public String hi (@RequestParam (name = "name", required = false, defaultValue = "JavaWorld") virknes nosaukums, modeļa modelis ) {atgriezt "Sveiki" + vārds; }}
@Controller anotācija
The @Kontrolieris
anotācija klasi identificē kā kontrolieri. Klase, kas atzīmēta kā kontrolieris, tiek automātiski identificēta arī kā komponentu klase, kas padara to par automātiskās elektroinstalācijas kandidātu. Kur nepieciešams šis kontrolieris, tas tiks pievienots ietvaram. Šajā gadījumā mēs to pievienosim MVC sistēmai, lai apstrādātu pieprasījumus.
Kontrolieris ir specializēta veida sastāvdaļa. Tas atbalsta @RequestMapping
un @ResponseBody
anotācijas, kuras redzat Sveiki()
metodi. Šīs anotācijas norāda, kā kartēt URL pieprasījumus lietotnei.
Šajā brīdī varat palaist lietotni ar mvn spring-boot: palaist
. Kad jūs hit /Sveiki
URL, jūs saņemsit tādu atbildi kā "Sveiki, JavaWorld".
Ievērojiet, kā pavasaris ir apguvis automātisko vadu komponentu pamatus un nodrošinājis veselu tīmekļa sistēmu. Ar pavasari jums nekas nav skaidri jāsavieno kopā!
@Request anotācijas
The @RequestMapping
ļauj noteikt URL ceļa apstrādātāju. Iespējas ietver vēlamās HTTP metodes definēšanu, ko mēs šajā gadījumā esam darījuši. Aizbraucot RequestMethod
izslēgts norādītu programmai rīkoties ar visiem HTTP metožu veidiem.
The @RequestParam
argumentu anotācija ļauj mums kartēt pieprasījuma parametrus tieši metodes parakstā, tostarp pieprasot noteiktus parametrus un definējot noklusējuma vērtības, kā mēs to darījām šeit. Mēs pat varam kartēt pieprasījuma struktūru klasē ar @ RequestBody
argumentu anotācija.
ATPŪTA un JSON atbilde
Ja veidojat REST galapunktu un vēlaties atgriezt JSON no metodes, metodi varat komentēt ar @ResponseBody
. Pēc tam atbilde tiks automātiski iesaiņota kā JSON. Šajā gadījumā jūs atgriezīsit objektu no metodes.
MVC izmantošana ar Spring Web
Līdzīgi kā Struts, pavasara tīmekļa moduli var viegli izmantot patiesai modeļa skata-kontrollera iestatīšanai. Tādā gadījumā jūs atgrieztu kartēšanu norādītajā veidņu valodā (piemēram, Thymeleaf), un Spring atrisinātu kartēšanu, sniegtu tam nodoto modeli un sniegtu atbildi.
3. piemērs: pavasaris ar JDBC
Tagad darīsim kaut ko interesantāku ar mūsu pieprasījumu apstrādātāju: atgriezīsim dažus datus no datu bāzes. Šajā piemērā mēs izmantosim H2 datu bāzi. Par laimi, Spring Boot atbalsta atmiņā esošo H2 DB no kastes.