Prečo si zvoliť jar ako svoj Java Framework?

1. Prehľad

V tomto článku si prejdeme hlavnú hodnotovú ponuku jari ako jedného z najpopulárnejších rámcov Java.

A čo je dôležitejšie, pokúsime sa pochopiť dôvody, pre ktoré je jar naším rámcom voľby. Podrobnosti o jari a jeho základných častiach sú obsiahle obsiahnuté v našich predchádzajúcich tutoriáloch. Preto vynecháme úvodné časti „ako“ a väčšinou sa zameriame na otázku „prečo“.

2. Prečo používať akýkoľvek rámec?

Predtým, ako začneme s nejakou diskusiou najmä na jar, najskôr si uvedomme, prečo vôbec musíme použiť akýkoľvek rámec.

A univerzálny programovací jazyk ako Java je schopný podporovať širokú škálu aplikácií. Nehovoriac o tom, že na Jave sa každý deň aktívne pracuje a zdokonaľuje sa.

Okrem toho existuje nespočetné množstvo otvorených a proprietárnych knižníc, ktoré v tomto ohľade podporujú Javu.

Prečo teda nakoniec potrebujeme rámec? Úprimne povedané, na splnenie úlohy nie je absolútne nevyhnutné použiť rámec. Často je však vhodné použiť jeden z niekoľkých dôvodov:

  • Pomáha nám zamerať sa skôr na kľúčovú úlohu ako na základný štítok s tým spojené
  • Spája v sebe roky múdrosti v podobe dizajnových vzorov
  • Pomáha nám dodržiavať priemyselné a regulačné normy
  • Znižuje celkové náklady na vlastníctvo aplikácie

Práve sme tu poškriabali povrch a musíme povedať, že výhody je ťažké ignorovať. Nemôžu to však byť všetko pozitívne, takže v čom je háčik:

  • Núti nás napísať žiadosť konkrétnym spôsobom
  • Viaže sa na konkrétnu verziu jazyka a knižníc
  • Zvyšuje stopu prostriedkov aplikácie

Úprimne povedané, vo vývoji softvéru neexistujú žiadne strieborné guľky a rámce rozhodne nie sú výnimkou. Takže výber, ktorý rámec alebo žiadny, by sa mal riadiť z kontextu.

Dúfajme, že do konca tohto článku budeme mať lepšie predpoklady na to, aby sme prijali toto rozhodnutie týkajúce sa jari v Jave.

3. Stručný prehľad jarného ekosystému

Predtým, ako začneme s kvalitatívnym hodnotením jarného rámca, pozrime sa bližšie, ako vyzerá jarný ekosystém.

Jar vznikla niekde v roku 2003 v čase, keď sa Java Enterprise Edition vyvíjala rýchlo a vývoj podnikovej aplikácie bol vzrušujúci, ale napriek tomu zdĺhavý!

Jar začala ako kontajner inverzie kontroly (IoC) pre Javu. Jar s ním stále väčšinou súvisíme a v skutočnosti tvorí jadro rámca a ďalších projektov, ktoré sa k nemu vyvinuli.

3.1. Jarný rámec

Jarná architektúra je rozdelená do modulov, vďaka čomu je skutočne ľahké vybrať a zvoliť si časti, ktoré sa majú použiť v akejkoľvek aplikácii:

  • Core: Poskytuje základné funkcie ako DI (Dependency Injection), internacionalizácia, validácia a AOP (Aspect Oriented Programming)
  • Prístup k údajom: Podporuje prístup k údajom prostredníctvom JTA (Java Transaction API), JPA (Java Persistence API) a JDBC (Java Database Connectivity).
  • Web: Podporuje Servlet API (Spring MVC) a nedávno Reactive API (Spring WebFlux) a navyše podporuje WebSockets, STOMP a WebClient
  • Integrácia: Podporuje integráciu do Enterprise Java prostredníctvom JMS (Java Message Service), JMX (Java Management Extension) a RMI (Remote Method Invocation).
  • Testovanie: Široká podpora testovania jednotiek a integrácie prostredníctvom simulovaných objektov, testovacích prípravkov, správy kontextu a ukladania do pamäte cache.

3.2. Jarné projekty

Ale vďaka čomu je jar oveľa cennejšia, je silný ekosystém, ktorý okolo seba rokmi vyrástol a ktorý sa naďalej aktívne vyvíja. Sú štruktúrované ako jarné projekty, ktoré sa vyvíjajú nad rámec jarného rámca.

Aj keď je zoznam jarných projektov dlhý a stále sa mení, je treba spomenúť niekoľko:

  • Boot: Poskytuje nám sadu vysoko premyslenej, ale rozšíriteľnej šablóny na vytváranie rôznych projektov založených na jari v takmer žiadnom okamihu. Vytváranie samostatných aplikácií Spring pomocou zabudovaného Tomcat alebo podobného kontajnera je skutočne ľahké.
  • Cloud: Poskytuje podporu na ľahký vývoj niektorých bežných vzorov distribuovaného systému, ako sú objavovanie služieb, prerušovač obvodu a brána API. Pomáha nám znížiť úsilie o nasadenie takýchto štandardných vzorov na miestne, vzdialené alebo dokonca spravované platformy.
  • Zabezpečenie: Poskytuje robustný mechanizmus na vysoko autentizovateľné vyvinutie autentifikácie a autorizácie pre projekty založené na Spring. S minimálnou deklaratívnou podporou získavame ochranu proti bežným útokom, ako sú napríklad fixácia relácie, jack-jacking a falšovanie žiadostí medzi webmi.
  • Mobil: Poskytuje možnosti detekcie zariadenia a zodpovedajúceho prispôsobenia správania aplikácie. Ďalej podporuje správu zobrazení so zreteľom na zariadenie pre optimálne užívateľské prostredie, správu preferencií stránok a prepínač stránok.
  • Dávkové: Poskytuje ľahký rámec pre vývoj dávkových aplikácií pre podnikové systémy, ako je archivácia dát. Má intuitívnu podporu pre plánovanie, reštart, preskakovanie, zhromažďovanie metrík a protokolovanie. Ďalej podporuje zväčšenie veľkoobjemových úloh prostredníctvom optimalizácie a rozdelenia na oddiely.

Netreba dodávať, že toto je celkom abstraktný úvod do toho, čo ponúka jar. Poskytuje nám však dostatok priestoru, pokiaľ ide o jarnú organizáciu a šírku, aby sme mohli našu diskusiu posunúť ďalej.

4. Jar v akcii

Je zvykom pridať program Hello World, aby ste pochopili všetky nové technológie.

Uvidíme ako Vďaka jari sa môže stať, že sa napíše program, ktorý bude robiť viac než len ahoj svet. Vytvoríme aplikáciu, ktorá odhalí operácie CRUD ako rozhrania REST API pre entitu domény, ako je zamestnanec, zálohovanú databázou v pamäti. A čo viac, budeme chrániť naše koncové body mutácie pomocou základného overenia. Nakoniec nemôže byť žiadna aplikácia úplná bez dobrých starých testov jednotiek.

4.1. Nastavenie projektu

Náš projekt Spring Boot nastavíme pomocou nástroja Spring Initializr, čo je pohodlný online nástroj na zavádzanie projektov so správnymi závislosťami. Pre správne nastavenie konfigurácie Maven pridáme ako závislosti na projektoch Web, JPA, H2 a Zabezpečenie.

Viac podrobností o bootstrappingu nájdete v jednom z našich predchádzajúcich článkov.

4.2. Doménový model a perzistencia

Keďže toho treba urobiť veľmi málo, sme už pripravení definovať náš doménový model a vytrvalosť.

Najprv definujme Zamestnanec ako jednoduchá entita JPA:

@Entity public class Employee {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @NotNull súkromný reťazec firstName; @NotNull súkromný reťazec priezvisko; // Štandardný konštruktor, getre a setre}

Všimnite si automaticky generované ID, ktoré sme zahrnuli do našej definície entity.

Teraz musíme pre našu entitu definovať úložisko JPA. To je miesto, kde Spring robí to naozaj jednoduché:

verejné rozhranie EmployeeRepository rozširuje CrudRepository {List findAll (); }

Musíme iba definovať takéto rozhranie a Jarné JPA nám poskytne implementáciu spresnenú o predvolené a vlastné operácie. Celkom upravené! Viac podrobností o práci s Spring Data JPA nájdete v našich ďalších článkoch.

4.3. Kontrolór

Teraz musíme definovať webový radič, ktorý bude smerovať a vybavovať naše prichádzajúce požiadavky:

@RestController verejná trieda EmployeeController {@Autowired private EmployeeRepository repository; @GetMapping ("/ zamestnanci") verejný zoznam getEmployees () {return repository.findAll (); } // Ostatné obslužné rutiny koncových bodov CRUD}

Naozaj, stačilo len urobiť anotovať triedu a definovať meta informácie o smerovaní spolu s každou metódou obsluhy.

Práce s regulátormi Spring REST sa v našom predchádzajúcom článku venujeme veľmi podrobne.

4.4. Bezpečnosť

Takže sme teraz definovali všetko, ale čo so zabezpečením operácií, ako je vytváranie alebo mazanie zamestnancov? Nechceme neautentizovaný prístup k týmto koncovým bodom!

Jarná bezpečnosť v tejto oblasti skutočne svieti:

@EnableWebSecurity verejná trieda WebSecurityConfig rozširuje WebSecurityConfigurerAdapter {@Override protected void configure (HttpSecurity http) vyvolá výnimku {http .authorizeRequests () .antMatchers (HttpMethod.GET, "/ zamestnanci", "/ zamestnanci / **") .permitAll anyRequest () .authenticated (). a () .httpBasic (); } // ďalšie potrebné fazule a definície}

Existuje viac podrobností, ktoré si vyžadujú pozornosť, aby ste im porozumeli, ale najdôležitejšou vecou, ​​ktorú je potrebné poznamenať, je deklaratívny spôsob, akým sme neobmedzene povolili iba operácie GET.

4.5. Testovanie

Teraz sme urobili všetko, ale počkajte, ako to otestujeme?

Pozrime sa, či nám Spring uľahčuje písanie testov jednotiek pre radiče REST:

@RunWith (SpringRunner.class) @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT) @AutoConfigureMockMvc verejná trieda EmployeeControllerTests {@Autowired private MockMvc mvc; @Test @WithMockUser () public void givenNoEmployee_whenCreateEmployee_thenEmployeeCreated () vyvolá výnimku {mvc.perform (post ("/ zamestnanci"). Obsah (nový ObjectMapper (). WriteValueAsString (nový zamestnanec ("prvý", "posledný")). csrf ())) .contentType (MediaType.APPLICATION_JSON) .accept (MediaType.APPLICATION_JSON)) .andExpect (MockMvcResultMatchers.status () .isCreated ()). andExpect (jsonPath ("$. firstName", je ("$. meno") je )). andExpect (jsonPath ("$. lastName", is ("Last")));; } // ďalšie testy podľa potreby}

Ako vidíme, Jar nám poskytuje potrebnú infraštruktúru na napísanie jednoduchých testov jednotiek a integrácie ktoré inak závisia od jarného kontextu, ktorý sa má inicializovať a nakonfigurovať.

4.6. Spustenie aplikácie

Nakoniec, ako spustíme túto aplikáciu? Toto je ďalší zaujímavý aspekt Spring Boot. Aj keď to môžeme zabaliť ako bežnú aplikáciu a nasadiť tradične na servletový kontajner.

Ale kde je zábava, že! Spring Boot sa dodáva so zabudovaným serverom Tomcat:

@SpringBootApplication verejná trieda Aplikácia {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}

Toto je trieda, ktorá je vopred vytvorená ako súčasť bootstrapu a ktorá obsahuje všetky potrebné podrobnosti na spustenie tejto aplikácie pomocou zabudovaného servera.

Toto je navyše veľmi prispôsobiteľné.

5. Alternatívy k jari

Aj keď je výber použitia rámca relatívne ľahší, výber medzi rámcami môže byť často skľučujúci s možnosťami, ktoré máme. Ale na to musíme mať aspoň hrubé pochopenie toho, aké alternatívy existujú pre funkcie, ktoré Spring ponúka.

Ako sme už diskutovali, jarný rámec spolu s jeho projektmi ponúka pre podnikových vývojárov široký výber. Ak urobíme rýchle hodnotenie súčasných rámcov Java, ani zďaleka sa nepribližujú ekosystému, ktorý nám poskytuje jar.

Pre konkrétne oblasti však tvoria presvedčivý argument, ktorý si môžu zvoliť ako alternatívy:

  • Guice: Ponúka robustný kontajner IoC pre aplikácie Java
  • Prehrať: Docela vhodne zapadá do webového rámca s reaktívnou podporou
  • Hibernate: Zavedený rámec pre prístup k údajom s podporou JPA

Okrem nich existuje niekoľko nedávnych dodatkov, ktoré ponúkajú širšiu podporu ako konkrétna doména, ale stále nepokrývajú všetko, čo Spring ponúka:

  • Mikronaut: Rámec založený na JVM šitý na mieru cloudovým mikroslužbám
  • Quarkus: Nový vekový zásobník Java, ktorý sľubuje rýchlejší čas spustenia a menšiu stopu

Je zrejmé, že nie je potrebné ani možné iterovať celý zoznam úplne, ale tu máme širokú myšlienku.

6. Prečo si teda zvoliť jar?

Nakoniec sme vytvorili všetok požadovaný kontext, aby sme vyriešili našu ústrednú otázku, prečo jar? Rozumieme tomu, ako nám rámec môže pomôcť pri vývoji komplexných podnikových aplikácií.

Okrem toho chápeme možnosti, ktoré máme k dispozícii pre konkrétne problémy, ako je web, prístup k dátam, integrácia v zmysle rámca, najmä pre Javu.

Kde teraz medzi tým všetkým svieti jar? Poďme preskúmať.

6.1. Použiteľnosť

Jedným z kľúčových aspektov popularity každého rámca je to, ako ľahko ho môžu vývojári používať. Využite niekoľko možností konfigurácie a funkcia Convention over Configuration to umožňuje Pre vývojárov je skutočne ľahké spustiť a potom nakonfigurovať presne to, čo potrebujú.

Projekty ako Vďaka Spring Boot je bootstrapping zložitého jarného projektu takmer triviálny. Nehovoriac o tom, že má vynikajúcu dokumentáciu a návody, ktoré každému pomôžu dostať sa na palubu.

6.2. Modularita

Ďalším kľúčovým aspektom popularity Spring je jeho vysoko modulárny charakter. Máme možnosti použiť celý rámec Spring alebo iba potrebné moduly. Navyše môžeme voliteľne zahrnúť jeden alebo viac jarných projektov podľa potreby.

A čo viac, máme možnosť použiť aj iné rámce ako Hibernate alebo Struts!

6.3. Zhoda

Aj keď jar nepodporuje všetky špecifikácie Jakarta EE, podporuje všetky svoje technológie, kde je to potrebné, často vylepšenie podpory oproti štandardnej špecifikácii. Napríklad Spring podporuje úložiská založené na JPA, a preto je ľahké zmeniť poskytovateľa.

Spring navyše podporuje priemyselné špecifikácie ako Reactive Stream pod Spring Web Reactive a HATEOAS pod Spring HATEOAS.

6.4. Testovateľnosť

Prijatie akéhokoľvek rámca do veľkej miery závisí aj od skutočnosti, aké ľahké je testovať aplikáciu postavenú na ňom. Jar v jadre obhajuje a podporuje vývoj zameraný na testovanie (TDD).

Aplikácia na jar je väčšinou zložená z POJO, čo prirodzene zjednodušuje testovanie jednotiek pomerne výrazne. Jar však poskytuje Mock objekty pre scenáre ako MVC, kde sa inak komplikuje testovanie jednotiek.

6.5 Splatnosť

Jar má dlhú históriu inovácií, adopcií a štandardizácie. V priebehu rokov sa to stalo dostatočne zrelé na to, aby sa stali predvoleným riešením pre väčšinu bežných problémov vývoj veľkých podnikových aplikácií.

O to vzrušujúcejšie je, ako aktívne sa vyvíja a udržiava. Podpora nových jazykových funkcií a riešení podnikovej integrácie sa vyvíja každý deň.

6.6. Podpora komunity

V neposlednom rade akýkoľvek rámec alebo dokonca knižnica prežije odvetvie prostredníctvom inovácií a pre inováciu neexistuje lepšie miesto ako komunita. Jar je otvorený zdroj vedená spoločnosťou Pivotal Software a podporovaná veľkým konzorciom organizácií a individuálnych vývojárov.

To znamená, že zostáva kontextové a často futuristické, čo je zrejmé z množstva projektov, ktoré zastrešuje.

7. Dôvody Nie použiť jar

Existuje široká škála aplikácií, ktoré môžu ťažiť z rozdielnej úrovne využitia jari, a to sa mení tak rýchlo, ako jar rastie.

Musíme však pochopiť, že jar ako každý iný rámec pomáha pri zvládaní zložitosti vývoja aplikácií. Pomáha nám vyhnúť sa bežným nástrahám a udržuje aplikáciu udržateľnú, ako bude časom rásť.

Toto prichádza za cenu dodatočnej stopy zdrojov a krivky učenia, nech sú akokoľvek malé. Ak skutočne existuje aplikácia, ktorá je dosť jednoduchá a neočakáva sa, že bude zložitejšia, bude možno výhodnejšie nepoužívať vôbec žiadny rámec!

8. Záver

V tomto článku sme diskutovali o výhodách použitia rámca pri vývoji aplikácií. Ďalej sme stručne diskutovali najmä o jarnom rámci.

Keď sme sa venovali tejto téme, pozreli sme sa tiež na niektoré alternatívne rámce dostupné pre Javu.

Na záver sme diskutovali o dôvodoch, ktoré nás môžu prinútiť zvoliť si Spring ako rámec výberu pre Javu.

Tento článok by sme však mali zakončiť poznámkou. Nech to znie akokoľvek presvedčivo, zvyčajne neexistuje jednotné riešenie pre všetkých pri vývoji softvéru.

Preto musíme použiť svoju múdrosť pri výbere najjednoduchšieho riešenia konkrétnych problémov, ktoré chceme vyriešiť.


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