Usporedba između proljetnog i proljetnog čizma

1. Pregled

U ovom ćemo tekstu pogledati razlike između standardnih okvira Spring i Spring Boot.

Usredotočit ćemo se na i raspravit ćemo o tome kako se moduli Springa, poput MVC i Security, razlikuju kada se koriste u jezgri Spring u odnosu na Boot.

2. Što je proljeće?

Jednostavno rečeno, Spring Spring pruža sveobuhvatnu infrastrukturnu podršku za razvoj Java aplikacija.

Opremljen je nekim lijepim značajkama poput ubrizgavanja ovisnosti i modulima koji se isporučuju iz paketa, kao što su:

  • Proljetni JDBC
  • Proljetni MVC
  • Proljetna sigurnost
  • Proljetni AOP
  • Proljetni ORM
  • Proljetni test

Ovi moduli mogu drastično smanjiti vrijeme razvoja aplikacije.

Primjerice, u prvim danima razvoja Java web-a trebali smo napisati puno koda za umetanje zapisa u izvor podataka. Ali pomoću JDBCTemplate Spring JDBC modula možemo ga smanjiti na nekoliko redaka koda sa samo nekoliko konfiguracija.

3. Što je Spring Boot?

Spring Boot je u osnovi produžetak okvira Spring koji je eliminirao konfiguracije kotlovskih ploča potrebne za postavljanje aplikacije Spring.

Zauzet je misaoni pogled na proljetnu platformu koja je otvorila put bržem i učinkovitijem razvojnom eko-sustavu.

Evo samo nekoliko značajki Spring Boota:

  • Zamišljene 'početne' ovisnosti za pojednostavljivanje izrade i konfiguracije aplikacije
  • Ugrađeni poslužitelj za izbjegavanje složenosti u implementaciji aplikacije
  • Mjerni podaci, provjera stanja i eksternalizirana konfiguracija
  • Automatska konfiguracija za funkcionalnost Spring - kad god je to moguće

Upoznajmo se s oba ova okvira korak po korak.

4. Ovisnosti Mavena

Prije svega, pogledajmo minimalne ovisnosti potrebne za stvaranje web aplikacije pomoću Springa:

 org.springframework spring-web 5.2.9.OSPUSTI org.springframework spring-webmvc 5.2.9.Opusti 

Za razliku od Springa, Spring Boot zahtijeva samo jednu ovisnost da bi se web aplikacija pokrenula:

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

Sve ostale ovisnosti automatski se dodaju u konačnu arhivu tijekom vremena izrade.

Još jedan dobar primjer je testiranje knjižnica. Obično koristimo skup knjižnica Spring Test, JUnit, Hamcrest i Mockito. U proljetnom projektu trebali bismo dodati sve ove knjižnice kao ovisnosti.

Ali u Spring Bootu potrebna nam je samo početna ovisnost za testiranje kako bismo automatski uključili ove knjižnice.

Spring Boot pruža brojne početne ovisnosti za različite Spring module. Neki od najčešće korištenih su:

  • spring-boot-starter-data-jpa
  • spring-boot-starter-sigurnost
  • proljetni-boot-starter-test
  • proljeće-boot-starter-web
  • opruga-čizma-starter-majčina dušica

Potpuni popis predjela potražite i u proljetnoj dokumentaciji.

5. MVC konfiguracija

Istražimo konfiguraciju potrebnu za stvaranje JSP web aplikacije koristeći Spring i Spring Boot.

Proljeće zahtijeva definiranje uslužnog programa dispečera, mapiranja i ostalih pratećih konfiguracija. To možemo učiniti koristeći bilo koji web.xml datoteku ili Inicijalizator razred:

javna klasa MyWebAppInitializer provodi WebApplicationInitializer {@Override public void onStartup (spremnik ServletContext) {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.setConfigLocation ("com.baeldung"); container.addListener (novi ContextLoaderListener (kontekst)); ServletRegistration.Dynamic dispečer = spremnik .addServlet ("dispečer", novi DispatcherServlet (kontekst)); dispečer.setLoadOnStartup (1); dispečer.addMapping ("/"); }}

Također moramo dodati @EnableWebMvc bilješka uz a @Konfiguracija klase i definirajte razrješivač prikaza za rješavanje pogleda vraćenih iz kontrolera:

@EnableWebMvc @Configuration javna klasa ClientWebConfig implementira WebMvcConfigurer {@Bean public ViewResolver viewResolver () {InternalResourceViewResolver bean = new InternalResourceViewResolver (); bean.setViewClass (JstlView.class); bean.setPrefix ("/ WEB-INF / view /"); bean.setSuffix (". jsp"); grah za povratak; }}

U usporedbi sa svim ovim, Spring Boot treba samo nekoliko svojstava da bi stvari funkcionirale, nakon što dodamo web starter:

spring.mvc.view.prefix = / WEB-INF / jsp / spring.mvc.view.suffix = .jsp

Sva gore navedena konfiguracija Proljeća automatski se uključuje dodavanjem web pokretača Boot, kroz postupak koji se naziva automatska konfiguracija.

To znači da će Spring Boot pogledati ovisnosti, svojstva i grah koji postoje u aplikaciji i omogućiti konfiguraciju na temelju njih.

Naravno, ako želimo dodati vlastitu prilagođenu konfiguraciju, tada će se automatski konfigurirati Spring Boot.

5.1. Konfiguriranje mehanizma predloška

Naučimo sada kako konfigurirati a Majčina dušica mehanizam za predloške u proljetnom i proljetnom pokretanju.

U proljeće moramo dodati majčina dušica-proljeće5 ovisnost i neke konfiguracije za rješivač prikaza:

@Configuration @EnableWebMvc javna klasa MvcWebConfig implementira WebMvcConfigurer {@Autowired private ApplicationContext applicationContext; @Bean public SpringResourceTemplateResolver templateResolver () {SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver (); templateResolver.setApplicationContext (applicationContext); templateResolver.setPrefix ("/ WEB-INF / prikazi /"); templateResolver.setSuffix (". html"); vrati predložakResolver; } @Bean public SpringTemplateEngine templateEngine () {SpringTemplateEngine templateEngine = novi SpringTemplateEngine (); templateEngine.setTemplateResolver (templateResolver ()); templateEngine.setEnableSpringELCompiler (istina); vratiti predložakEngine; } @Override public void configureViewResolvers (Registar ViewResolverRegistry) {ThymeleafViewResolver resolver = novi ThymeleafViewResolver (); resolver.setTemplateEngine (templateEngine ()); registry.viewResolver (razrješivač); }}

Spring Boot 1 zahtijevao je samo ovisnost opruga-čizma-starter-majčina dušica kako bi se omogućilo Majčina dušica podrška u web aplikaciji. Ali zbog novih značajki u Majčina dušica3.0, moramo dodati majčina dušica-raspored-dijalekt također kao ovisnost u web aplikaciji Spring Boot 2. Alternativno, možemo odabrati dodavanje a opruga-čizma-starter-majčina dušica ovisnost koja će se za sve ovo pobrinuti za nas.

Jednom kada su ovisnosti na mjestu, možemo dodati predloške u src / main / resources / predlošci mapa i Spring Boot će ih automatski prikazati.

6. Proljetna sigurnosna konfiguracija

Radi jednostavnosti, vidjet ćemo kako je omogućena zadana HTTP osnovna provjera autentičnosti pomoću ovih okvira.

Počnimo s gledanjem ovisnosti i konfiguracije koje su nam potrebne za omogućavanje sigurnosti pomoću Springa.

Proljeće zahtijeva i standard proljeće-sigurnost-web i opruga-sigurnost-konfiguracija ovisnosti za postavljanje sigurnosti u aplikaciji.

Sljedeći, trebamo dodati klasu koja proširuje WebSecurityConfigurerAdapter i koristi se @EnableWebSecurity napomena:

@Configuration @EnableWebSecurity javna klasa CustomWebSecurityConfigurerAdapter proširuje WebSecurityConfigurerAdapter {@Autowired javna void configureGlobal (AuthenticationManagerBuilder auth) baca izuzetak {auth.inMemoryAuthentication () .withUserPress. ("ROLE_USER"); } @Override zaštićena void konfiguracija (HttpSecurity http) baca iznimku {http.authorizeRequests () .anyRequest (). Authenticated () .and () .httpBasic (); } @Bean public PasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }}

Ovdje koristimo inMemoryAuthentication za postavljanje provjere autentičnosti.

Slično tome, Spring Boot također zahtijeva ove ovisnosti da bi funkcionirao. Ali trebamo definirati samo ovisnostspring-boot-starter-sigurnost jer će ovo automatski dodati sve relevantne ovisnosti na put predavanja.

Sigurnosna konfiguracija u Spring Boot-u jednaka je gornjoj.

Ako trebate znati kako se JPA konfiguracija može postići i u Spring i Spring Boot, pogledajte naš članak Vodič za JPA s Springom.

7. Bootstrap aplikacije

Osnovna razlika u pokretanju aplikacije u Spring i Spring Boot leži u servletu. Proljeće koristi bilo web.xml ili SpringServletContainerInitializer kao početnu točku bootstrapa.

S druge strane, Spring Boot koristi samo značajke Servlet 3 za pokretanje aplikacije. Razgovarajmo o tome detaljno.

7.1. Kako proljetni bootstraps?

Proljeće podržava i naslijeđe web.xml način pokretanja, kao i najnovija metoda Servlet 3+.

Da vidimo web.xml pristup u koracima:

  1. Spremnik servleta (poslužitelj) čita web.xml
  2. The DispatcherServlet definirano u web.xml instancira ga spremnik
  3. DispatcherServlet stvara WebApplicationContext čitanjem WEB-INF / {servletName} -servlet.xml
  4. Napokon, DispatcherServlet registrira grah definiran u kontekstu aplikacije

Evo kako pristupaju Spring bootstraps koristeći Servlet 3+:

  1. Spremnik traži izvedbu klasa ServletContainerInitializer i izvršava
  2. The SpringServletContainerInitializer pronalazi da se svi razredi provode WebApplicationInitializer
  3. The WebApplicationInitializer stvara kontekst s XML-om ili @Konfiguracija razreda
  4. The WebApplicationInitializer stvara DispatcherServlet s prethodno stvorenim kontekstom.

7.2. Kako proljetni bootstraps?

Ulazna točka aplikacije Spring Boot je klasa koja je označena @SpringBootApplication:

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

Prema zadanim postavkama Spring Boot koristi ugrađeni spremnik za pokretanje aplikacije. U ovom slučaju, Spring Boot koristi javna statička praznina glavna ulazna točka za pokretanje ugrađenog web poslužitelja.

Također, brine se o vezivanju Servlet, filtar, i ServletContextInitializer grah iz konteksta aplikacije u ugrađeni spremnik servleta.

Još jedna značajka Spring Boota je da automatski skenira sve klase u istom paketu ili potpaketima Main-klase za komponente.

Spring Boot pruža mogućnost postavljanja kao web arhivu i u vanjski spremnik. U ovom slučaju, moramo proširiti SpringBootServletInitializer:

@SpringBootApplication javna klasa Aplikacija proširuje SpringBootServletInitializer {// ...}

Ovdje vanjski spremnik servleta traži glavnu klasu definiranu u META-INF datoteci web arhive i SpringBootServletInitializer pobrinut će se za uvezivanje Servlet, filtar, i ServletContextInitializer.

8. Pakiranje i primjena

Napokon, pogledajmo kako se aplikacija može spakirati i primijeniti. Oba ova okvira podržavaju zajedničke tehnologije upravljanja paketima poput Mavena i Gradlea. Ali što se tiče implementacije, ti se okviri puno razlikuju.

Na primjer, dodatak Spring Boot Maven pruža podršku za Spring Boot u Mavenu. Omogućuje i pakiranje izvršne jar ili ratne arhive i pokretanje aplikacije "na mjestu".

Neke od prednosti Spring Boota u odnosu na Spring u kontekstu implementacije uključuju:

  • Pruža podršku za ugrađeni spremnik
  • Odredba za samostalno pokretanje staklenki pomoću naredbe java -jar
  • Mogućnost izuzimanja ovisnosti kako bi se izbjegli potencijalni sukobi jar prilikom postavljanja u vanjski spremnik
  • Mogućnost navođenja aktivnih profila prilikom postavljanja
  • Nasumično generiranje porta za integracijske testove

9. Zaključak

U ovom uputstvu naučili smo o razlikama između Spring and Spring Boot.

U nekoliko riječi možemo reći da je Spring Boot jednostavno produženje samog Springa kako bi razvoj, testiranje i implementacija bili praktičniji.