Programmēšana

Kas ir pavasaris? Komponentu bāzes izstrāde Java

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ā:

  1. The vecāks elements paļaujas uz pavasaris-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 un SpringBootParent iestatīs versijas kā saderīgas. Atsākot vecāku versijas numuru, mainīsies arī atkarības versijas un noklusējumi.
  2. The pavasaris-boot-maven-spraudnis ļauj izpildāmo JAR / WAR iepakojumu un to ievietot vietā palaist (caur mvn 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.

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