Zašto odabrati proljeće kao svoj Java Framework?

1. Pregled

U ovom ćemo članku proći kroz glavnu vrijednost Springa kao jednog od najpopularnijih Java okvira.

Još važnije, pokušat ćemo razumjeti razloge zašto je proljeće naš okvir izbora. Pojedinosti o Proljeću i njegovim sastavnim dijelovima široko su obrađeni u našim prethodnim vodičima. Stoga ćemo preskočiti uvodne dijelove "kako" i uglavnom se usredotočiti na "zašto".

2. Zašto koristiti bilo koji okvir?

Prije nego što započnemo bilo kakvu raspravu, posebno o Proljeću, prvo shvatimo zašto uopće trebamo koristiti bilo koji okvir.

A programski jezik opće namjene poput Jave sposoban je podržati širok spektar aplikacija. A da se i ne spominje kako se na Javi svakodnevno aktivno radi i poboljšava.

Štoviše, postoji bezbroj biblioteka otvorenog koda i vlasničkih knjižnica koje podržavaju Javu u tom pogledu.

Pa zašto nam je uopće potreban okvir? Iskreno, nije apsolutno potrebno koristiti okvir za izvršavanje zadatka. No, često je preporučljivo koristiti jedan iz nekoliko razloga:

  • Pomaže nam usredotočite se na osnovni zadatak, a ne na okvir povezano s tim
  • Objedinjuje godine mudrosti u obliku dizajnerskih uzoraka
  • Pomaže nam u pridržavanju industrijskih i regulatornih standarda
  • Smanjuje ukupne troškove vlasništva za aplikaciju

Ovdje smo tek ogrebali površinu i moramo reći da je teško zanemariti blagodati. Ali ne može biti sve pozitivno, pa u čemu je kvaka:

  • Prisiljava nas da napisati prijavu na određeni način
  • Veže se za određenu verziju jezika i knjižnice
  • Dodaje otisak resursa aplikacije

Iskreno, u razvoju softvera nema srebrnih metaka, a okviri zasigurno nisu iznimka od toga. Dakle, izbor koji okvir ili nijedan ne treba provoditi iz konteksta.

Nadamo se da ćemo do kraja ovog članka biti u boljoj poziciji da donesemo ovu odluku s obzirom na Spring in Java.

3. Kratki pregled proljetnog ekosustava

Prije nego što započnemo s kvalitativnom procjenom Proljetnog okvira, pogledajmo bliže kako izgleda proljetni ekosustav.

Proljeće je nastalo negdje 2003. godine u vrijeme kad se Java Enterprise Edition brzo razvijao, a razvoj poslovne aplikacije bio je uzbudljiv, ali unatoč tome dosadan!

Spring je započeo kao Inversion of Control (IoC) spremnik za Javu. Proljeće još uvijek uglavnom povezujemo s njim i zapravo on čini srž okvira i drugih projekata koji su razvijeni povrh njega.

3.1. Proljetni okvir

Proljetni okvir podijeljen je na module, što ga čini vrlo jednostavnim za biranje u dijelovima za upotrebu u bilo kojoj aplikaciji:

  • Jezgra: pruža ključne značajke poput DI (ubrizgavanje ovisnosti), internacionalizacija, provjera valjanosti i AOP (programiranje usmjereno na aspekte)
  • Pristup podacima: Podržava pristup podacima putem JTA (Java Transaction API), JPA (Java Persistence API) i JDBC (Java Database Connectivity)
  • Web: Podržava i Servlet API (Spring MVC) i nedavno reaktivni API (Spring WebFlux), a dodatno podržava WebSockets, STOMP i WebClient
  • Integracija: Podržava integraciju u Enterprise Java putem JMS-a (Java Message Service), JMX (Java Management Extension) i RMI (Remote Method Invocation)
  • Testiranje: široka podrška za jedinstveno i integracijsko testiranje kroz lažne objekte, ispitne uređaje, upravljanje kontekstom i predmemoriranje

3.2. Proljetni projekti

Ali ono što Proljeće čini mnogo vrijednijim je snažan ekosustav koji je godinama rastao oko njega i koji se i dalje aktivno razvija. Oni su strukturirani kao proljetni projekti koji su razvijeni na vrhu proljetnog okvira.

Iako je popis proljetnih projekata dugačak i stalno se mijenja, nekoliko je vrijednih spomena:

  • Dizanje: Pruža nam skup vrlo samopouzdanih, ali proširivih predložaka za izradu različitih projekata temeljenih na Proljeću u gotovo niti jednom trenutku. Olakšava stvaranje samostalnih proljetnih aplikacija s ugrađenim Tomcatom ili sličnim spremnikom.
  • Cloud: pruža podršku za lakši razvoj nekih uobičajenih obrazaca distribuiranog sustava poput otkrivanja usluge, prekidača i API pristupnika. Pomaže nam smanjiti napore da se takvi uzorci ugrade u lokalne, udaljene ili čak upravljane platforme.
  • Sigurnost: Pruža robustan mehanizam za razvoj provjere autentičnosti i autorizacije za projekte temeljene na Springu na vrlo prilagodljiv način. Uz minimalnu deklarativnu podršku dobivamo zaštitu od uobičajenih napada poput fiksiranja sesija, prevrtanja klikova i krivotvorenja zahtjeva s više web lokacija.
  • Mobilni: pruža mogućnosti otkrivanja uređaja i prilagođavanja ponašanja aplikacije u skladu s tim. Uz to, podržava upravljanje prikazima s osvrtom na uređaj za optimalno korisničko iskustvo, upravljanje postavkama web mjesta i prebacivanje web lokacija.
  • Batch: pruža lagan okvir za razvoj batch aplikacija za poslovne sustave poput arhiviranja podataka. Ima intuitivnu podršku za zakazivanje, ponovno pokretanje, preskakanje, prikupljanje mjernih podataka i bilježenje. Uz to, podržava skaliranje velikih poslova putem optimizacije i particioniranja.

Nepotrebno je reći da je ovo prilično apstraktan uvod u ono što proljeće nudi. Ali pruža nam dovoljno osnova za organizaciju i širinu Proljeća da vodimo našu raspravu dalje.

4. Proljeće na djelu

Uobičajeno je dodavati program iz zdravog svijeta kako biste razumjeli bilo koju novu tehnologiju.

Da vidimo kako Proljeće može napraviti kolač za pisanje programa koji čini više od pukog pozdravljanja. Stvorit ćemo aplikaciju koja će CRUD operacije izlagati kao REST API-je za entitet domene kao što je Employee iza kojeg stoji baza podataka u memoriji. Štoviše, zaštitit ćemo svoje krajnje točke mutacije koristeći osnovnu autorizaciju. Napokon, nijedna aplikacija zaista ne može biti cjelovita bez dobrih starih jedinstvenih testova.

4.1. Postavljanje projekta

Postavit ćemo projekt Spring Boot pomoću Spring Initializr, koji je prikladan mrežni alat za pokretanje projekata s pravim ovisnostima. Dodati ćemo Web, JPA, H2 i Sigurnost kao ovisnosti o projektu kako bismo pravilno postavili konfiguraciju Mavena.

Više detalja o bootstrappingu dostupno je u jednom od naših prethodnih članaka.

4.2. Model domene i postojanost

S tako malo što je trebalo učiniti, već smo spremni definirati svoj model domene i postojanost.

Prvo definirajmo Zaposlenik kao jednostavna JPA cjelina:

@Entity zaposlenik u javnoj klasi {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @NotNull privatni niz firstName; @NotNull privatni niz lastName; // Standardni konstruktor, getteri i postavljači}

Obratite pažnju na automatski generirani id koji smo uključili u definiciju entiteta.

Sada moramo definirati JPA spremište za naš entitet. Proljeće to čini zaista jednostavnim:

javno sučelje EmployeeRepository proširuje CrudRepository {List findAll (); }

Sve što moramo učiniti je definirati ovakvo sučelje i Proljetni JPA pružit će nam implementaciju detaljnu sa zadanim i prilagođenim operacijama. Sasvim uredno! U našim ostalim člancima pronađite više detalja o radu s Spring Data JPA.

4.3. Kontroler

Sada moramo definirati web kontroler za usmjeravanje i obradu naših dolaznih zahtjeva:

@RestController javna klasa EmployeeController {@Autowired privatno spremište EmployeeRepository; @GetMapping ("/ zaposlenici") javni popis getEfficiees () {return repository.findAll (); } // ostali CRUD rukovatelji krajnjim točkama}

Zaista, sve što smo morali učiniti bilo je označiti klasu i definirati meta informacije o usmjeravanju zajedno sa svakom metodom rukovatelja.

Rad s kontrolerima Spring REST detaljno je opisan u našem prethodnom članku.

4.4. Sigurnost

Dakle, sada smo sve definirali, ali što je s osiguravanjem operacija poput stvaranja ili brisanja zaposlenika? Ne želimo neovlašteni pristup tim krajnjim točkama!

Spring Security zaista blista na ovom području:

@EnableWebSecurity javna klasa WebSecurityConfig proširuje WebSecurityConfigurerAdapter {@Override zaštićena void konfiguracija (HttpSecurity http) baca izuzetak {http .authorizeRequests () .antMatchers (HttpMethod.GET, "/ zaposlenici", "/ zaposlenici / **".. anyRequest () .authenticated () .and () .httpBasic (); } // ostali potrebni grah i definicije}

Ovdje ima više detalja kojima je potrebna pažnja da bi se razumjeli, ali najvažnija stvar koju treba imati na umu je deklarativni način na koji smo dozvolili samo neograničene GET operacije.

4.5. Testiranje

Sad smo 'učinili sve, ali pričekajte, kako to testirati?

Pogledajmo može li Spring olakšati pisanje jediničnih testova za REST kontrolere:

@RunWith (SpringRunner.class) @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT) @AutoConfigureMockMvc javna klasa EmployeeControllerTests {@Autowired private MockMvc mvc; @Test @WithMockUser () javna praznina givenNoEfficiee_whenCreateEfficiee_thenEfficieeCreated () baca izuzetak {mvc.perform (post ("/ zaposlenici"). Content (new ObjectMapper (). WriteValueAsString (new Employee ("Firstw," Last "). csrf ())) .contentType (MediaType.APPLICATION_JSON) .accept (MediaType.APPLICATION_JSON)) .andExpect (MockMvcResultMatchers.status () .isCreate ()) .andExpect (jsonPath "," $. firstName "," $. firstName "," $. firstName "," $. firstName "," $. firstName "," )) .andExpect (jsonPath ("$. lastName", je ("Last"))); } // // ostali testovi po potrebi}

Kao što vidimo, Spring nam pruža potrebnu infrastrukturu za pisanje jednostavnih unit i integracijskih testova koji inače ovise o kontekstu Spring koji se inicijalizira i konfigurira.

4.6. Pokretanje aplikacije

Konačno, kako pokrenuti ovu aplikaciju? Ovo je još jedan zanimljiv aspekt Spring Boot-a. Iako ovo možemo pakirati kao redovnu aplikaciju i tradicionalno rasporediti na spremnik Servlet.

Ali gdje je zabavno ovo ono! Spring Boot dolazi s ugrađenim Tomcat poslužiteljem:

@SpringBootApplication javna klasa Application {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}

Ovo je klasa koja je unaprijed kreirana kao dio bootstrapa i ima sve potrebne detalje za pokretanje ove aplikacije pomoću ugrađenog poslužitelja.

Štoviše, ovo je vrlo prilagodljivo.

5. Alternative proljeću

Iako je odabir upotrebe okvira relativno lakše, odabir između okvira često može biti zastrašujući odabirom koji imamo. Ali za to moramo barem približno shvatiti koje alternative postoje značajkama koje nudi Proljeće.

Kao što smo prethodno razgovarali, Proljetni okvir zajedno sa svojim projektima nudi širok izbor za razvojne programere poduzeća. Ako napravimo brzu procjenu suvremenih Java okvira, oni se ni približno ne približavaju ekosustavu koji nam pruža Spring.

Međutim, za određena područja čine uvjerljiv argument koji bi se izabrali kao alternative:

  • Guice: Nudi robusni IoC spremnik za Java programe
  • Reprodukcija: Prilično se uklapa u web okvir s reaktivnom podrškom
  • Hibernate: uspostavljeni okvir za pristup podacima uz podršku JPA

Osim ovih, postoje neki noviji dodaci koji nude širu podršku od određene domene, ali još uvijek ne pokrivaju sve što proljeće nudi:

  • Micronaut: JVM-ov okvir prilagođen mikro-uslugama izvornih u oblaku
  • Quarkus: Novo doba Java stog koji obećava brže pokretanje i manji otisak

Očito nije niti potrebno niti izvedivo prelistavati popis u potpunosti, ali ovdje imamo široku ideju.

6. Pa, zašto odabrati proljeće?

Konačno, izgradili smo sav potreban kontekst kako bismo odgovorili na naše središnje pitanje, zašto proljeće? Razumijemo načine na koje nam okvir može pomoći u razvoju složenih poslovnih aplikacija.

Štoviše, razumijemo mogućnosti koje imamo za specifične probleme kao što su web, pristup podacima, integracija u smislu okvira, posebno za Javu.

Sad, gdje među svim tim svijetli Proljeće? Istražimo.

6.1. Upotrebljivost

Jedan od ključnih aspekata popularnosti bilo kojeg okvira je koliko je lako programerima da ga koriste. Proljeće kroz više mogućnosti konfiguracije i Konvencija nad konfiguracijom to čini programerima je vrlo lako započeti, a zatim konfigurirati točno ono što im treba.

Projekti poput Spring Boot učinili su bootstrapping složenim Spring projektom gotovo trivijalnim. Da ne spominjem, ima izvrsnu dokumentaciju i upute za pomoć bilo kome da se ukrca.

6.2. Modularnost

Sljedeći ključni aspekt popularnosti Springa je njegova visoko modularna priroda. Imamo mogućnosti korištenja cijelog Spring Spring okvira ili samo potrebnih modula. Štoviše, možemo po želji uključiti jedan ili više proljetnih projekata ovisno o potrebi.

Štoviše, imamo mogućnost korištenja i drugih okvira poput Hibernate ili Struts!

6.3. Sukladnost

Iako proljeće ne podržava sve specifikacije Jakarta EE, podržava sve njegove tehnologije, često po potrebi poboljšavajući podršku u odnosu na standardne specifikacije. Na primjer, Spring podržava spremišta temeljena na JPA i stoga je trivijalno mijenjati davatelja usluga.

Štoviše, Spring podržava industrijske specifikacije poput Reactive Stream pod Spring Web Reactive i HATEOAS pod Spring HATEOAS.

6.4. Ispitljivost

Usvajanje bilo kojeg okvira uvelike ovisi i o tome koliko je jednostavno testirati aplikaciju izgrađenu na njemu. Proljeće u srži zagovara i podržava razvoj vođen testom (TDD).

Proljetna aplikacija uglavnom se sastoji od POJO-a što prirodno čini jedinstveno testiranje relativno mnogo jednostavnijim. Međutim, Spring pruža izmišljene objekte za scenarije poput MVC-a gdje se jedinično testiranje inače zakomplicira.

6.5 Zrelost

Proljeće ima dugu povijest inovacija, usvajanja i standardizacije. S godinama je to postalo dovoljno zreo da postane zadano rješenje za najčešće probleme suočeni u razvoju velikih poduzeća.

Još je uzbudljivije koliko se aktivno razvija i održava. Podrška za nove jezične značajke i rješenja za integraciju poduzeća razvijaju se svakodnevno.

6.6. Podrška zajednice

I na kraju, ali ne najmanje važno, bilo koji okvir ili čak knjižnica preživljavaju industriju kroz inovacije i nema boljeg mjesta za inovacije od zajednice. Proljeće je otvoreni izvor na čelu s Pivotal Softwareom, a potpomognut velikim konzorcijem organizacija i pojedinačnim programerima.

To je značilo da ostaje kontekstualna i često futuristička, što je vidljivo iz broja projekata pod njenim kišobranom.

7. Razlozi Ne koristiti proljeće

Postoji širok spektar aplikacija koje mogu imati koristi od različite razine korištenja proljeća, a to se mijenja brzo kako proljeće raste.

Međutim, moramo shvatiti da je Spring kao i svaki drugi okvir koristan u upravljanju složenošću razvoja aplikacija. Pomaže nam u izbjegavanju uobičajenih zamki i održava aplikaciju održivom kako vremenom raste.

Ovaj dolazi po cijenu dodatnog otiska resursa i krivulje učenja, koliko god to bilo malo. Ako zaista postoji aplikacija koja je dovoljno jednostavna i ne očekuje se da će postati složena, možda će vam biti korisnije ako uopće ne upotrebljavate bilo kakav okvir!

8. Zaključak

U ovom smo članku razgovarali o prednostima upotrebe okvira u razvoju aplikacija. Dalje smo kratko razgovarali, posebno o Proljetnom okviru.

Dok smo se bavili tom temom, također smo pogledali neke od alternativnih okvira dostupnih za Javu.

Na kraju smo razgovarali o razlozima koji nas mogu natjerati da odaberemo Proljeće kao okvir izbora za Javu.

Ipak bismo ovaj članak trebali završiti bilješkom. Koliko god to zvučalo uvjerljivo, obično ne postoji jedinstveno rješenje za sve u razvoju softvera.

Stoga svoju mudrost moramo primijeniti u odabiru najjednostavnijih rješenja za specifične probleme koje želimo riješiti.