En sammenligning mellom vår og vårstøvel

1. Oversikt

I denne oppskriften skal vi se på forskjellene mellom standard Spring Framework og Spring Boot.

Vi vil fokusere på og diskutere hvordan modulene fra våren, som MVC og sikkerhet, er forskjellige når de brukes i kjernen våren når de brukes med Boot.

2. Hva er vår?

Enkelt sagt, våren gir omfattende infrastrukturstøtte for utvikling av Java-applikasjoner.

Den er fullpakket med noen fine funksjoner som Dependency Injection og out of the box-moduler som:

  • Våren JDBC
  • Vår MVC
  • Vårsikkerhet
  • Vår AOP
  • Vår ORM
  • Vårtest

Disse modulene kan redusere utviklingstiden til en applikasjon drastisk.

For eksempel, i de tidlige dagene av Java-webutvikling, trengte vi å skrive mye kjelekode for å sette inn en post i en datakilde. Men ved å bruke JDBCTemplate i vår JDBC-modul kan vi redusere den til noen få kodelinjer med bare noen få konfigurasjoner.

3. Hva er Spring Boot?

Spring Boot er i utgangspunktet en utvidelse av Spring-rammeverket som eliminerte kjelekonfigurasjonene som kreves for å sette opp en Spring-applikasjon.

Det tar en oppfatning av vårplattformen som banet vei for et raskere og mer effektivt økosystem.

Her er bare noen få av funksjonene i Spring Boot:

  • Opinionated 'starter' avhengigheter for å forenkle bygging og applikasjonskonfigurasjon
  • Innebygd server for å unngå kompleksitet i applikasjonsdistribusjon
  • Målinger, helsesjekk og eksternalisert konfigurasjon
  • Automatisk konfigurasjon for vårfunksjonalitet - når det er mulig

La oss bli kjent med begge disse rammene trinn for trinn.

4. Maven Avhengigheter

La oss først se på de minste avhengighetene som kreves for å opprette en webapplikasjon ved hjelp av Spring:

 org.springframework spring-web 5.2.9.RELEASE org.springframework spring-webmvc 5.2.9.RELEASE 

I motsetning til våren krever Spring Boot bare en avhengighet for å få en webapplikasjon i gang:

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

Alle andre avhengigheter legges automatisk til det endelige arkivet i løpet av byggetiden.

Et annet godt eksempel er å teste biblioteker. Vi bruker vanligvis settet med Spring Test, JUnit, Hamcrest og Mockito biblioteker. I et vårprosjekt bør vi legge til alle disse bibliotekene som avhengigheter.

Men i Spring Boot trenger vi bare startavhengighet for testing for automatisk å inkludere disse bibliotekene.

Spring Boot gir en rekke startavhengigheter for forskjellige Spring-moduler. Noen av de mest brukte er:

  • spring-boot-starter-data-jpa
  • vår-boot-starter-sikkerhet
  • vår-støvel-start-test
  • spring-boot-starter-web
  • spring-boot-starter-thymeleaf

For hele listen over forretter, sjekk også vårdokumentasjonen.

5. MVC-konfigurasjon

La oss utforske konfigurasjonen som kreves for å opprette en JSP-webapplikasjon ved hjelp av både Spring og Spring Boot.

Våren krever å definere senderservlet, kartlegginger og andre støttende konfigurasjoner. Vi kan gjøre dette ved hjelp av enten web.xml fil eller en Initialiser klasse:

offentlig klasse MyWebAppInitializer implementerer WebApplicationInitializer {@Override public void onStartup (ServletContext container) {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.setConfigLocation ("com.baeldung"); container.addListener (ny ContextLoaderListener (kontekst)); ServletRegistration.Dynamic dispatcher = container .addServlet ("dispatcher", ny DispatcherServlet (kontekst)); dispatcher.setLoadOnStartup (1); dispatcher.addMapping ("/"); }}

Vi må også legge til @EnableWebMvc kommentar til a @Konfigurasjon klasse og definere en view-resolver for å løse visningene som returneres fra kontrollerne:

@EnableWebMvc @Configuration offentlig klasse ClientWebConfig implementerer WebMvcConfigurer {@Bean public ViewResolver viewResolver () {InternalResourceViewResolver bean = new InternalResourceViewResolver (); bean.setViewClass (JstlView.class); bean.setPrefix ("/ WEB-INF / view /"); bean.setSuffix (". jsp"); retur bønne; }}

Sammenlignet med alt dette, Spring Boot trenger bare et par egenskaper for å få ting til å fungere, når vi har lagt til nettstarteren:

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

All vårkonfigurasjonen ovenfor inkluderes automatisk ved å legge til Boot web starter, gjennom en prosess som kalles autokonfigurasjon.

Hva dette betyr er at Spring Boot vil se på avhengigheter, egenskaper og bønner som finnes i applikasjonen og aktivere konfigurasjon basert på disse.

Selvfølgelig, hvis vi vil legge til vår egen tilpassede konfigurasjon, vil Spring Boot-autokonfigurasjonen vende tilbake.

5.1. Konfigurere malmotor

La oss nå lære å konfigurere en Thymeleaf malmotor i både vår- og vårstøvel.

På våren må vi legge til thymeleaf-spring5 avhengighet og noen konfigurasjoner for visningsoppløseren:

@Configuration @EnableWebMvc offentlig klasse MvcWebConfig implementerer WebMvcConfigurer {@Autowired private ApplicationContext applicationContext; @Bean public SpringResourceTemplateResolver templateResolver () {SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver (); templateResolver.setApplicationContext (applicationContext); templateResolver.setPrefix ("/ WEB-INF / views /"); templateResolver.setSuffix (". html"); returmalResolver; } @Bean public SpringTemplateEngine templateEngine () {SpringTemplateEngine templateEngine = new SpringTemplateEngine (); templateEngine.setTemplateResolver (templateResolver ()); templateEngine.setEnableSpringELCompiler (true); returmalMotor; } @Override public void configureViewResolvers (ViewResolverRegistry registry) {ThymeleafViewResolver resolver = new ThymeleafViewResolver (); resolver.setTemplateEngine (templateEngine ()); registry.viewResolver (resolver); }}

Spring Boot 1 krevde bare avhengigheten av spring-boot-starter-thymeleaf å aktivere Thymeleaf støtte i en webapplikasjon. Men på grunn av de nye funksjonene i Thymeleaf3.0, vi må legge til thymeleaf-layout-dialekt også som en avhengighet i en Spring Boot 2-nettapplikasjon. Alternativt kan vi velge å legge til en spring-boot-starter-thymeleaf avhengighet som tar seg av alt dette for oss.

Når avhengighetene er på plass, kan vi legge til malene i src / hoved / ressurser / maler mappen og Spring Boot vil vise dem automatisk.

6. Vårens sikkerhetskonfigurasjon

For enkelhets skyld skal vi se hvordan standard HTTP Basic-autentisering er aktivert ved hjelp av disse rammene.

La oss starte med å se på avhengighetene og konfigurasjonen vi trenger for å aktivere sikkerhet ved hjelp av våren.

Våren krever både standarden vår-sikkerhets-web og vår-sikkerhet-config avhengigheter for å sette opp sikkerhet i et program.

Neste, vi må legge til en klasse som utvider WebSecurityConfigurerAdapter og benytter seg av @EnableWebSecurity kommentar:

@Configuration @EnableWebSecurity offentlig klasse CustomWebSecurityConfigurerAdapter utvider WebSecurityConfigurerAdapter {@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster unntak {auth.inMemoryAuthentication () .withUser ("user1") .pass. ("ROLE_USER"); } @ Override beskyttet tom konfigurering (HttpSecurity http) kaster Unntak {http.authorizeRequests () .anyRequest (). Autentisert (). Og () .httpBasic (); } @Bean public PasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }}

Her bruker vi inMemoryAuthentication for å sette opp godkjenningen.

På samme måte krever Spring Boot også disse avhengighetene for å få det til å fungere. Men vi trenger å definere bare avhengigheten avvår-boot-starter-sikkerhet da dette automatisk vil legge til alle relevante avhengigheter i klassestien.

Sikkerhetskonfigurasjonen i Spring Boot er den samme som den ovenfor.

Hvis du trenger å vite hvordan JPA-konfigurasjonen kan oppnås i både Spring og Spring Boot, sjekk ut artikkelen vår A Guide to JPA with Spring.

7. Søknad Bootstrap

Den grunnleggende forskjellen i bootstrapping av en applikasjon i Spring og Spring Boot ligger hos servletten. Våren bruker enten web.xml eller SpringServletContainerInitializer som oppstartspunkt for bootstrap.

På den annen side bruker Spring Boot bare Servlet 3-funksjoner for å starte en applikasjon. La oss snakke om dette i detalj.

7.1. Hvordan vårstøvler

Våren støtter både arven web.xml måte for bootstrapping så vel som den siste Servlet 3+ metoden.

La oss se web.xml tilnærming i trinn:

  1. Servletbeholder (serveren) leser web.xml
  2. De DispatcherServlet definert i web.xml blir instantiert av beholderen
  3. DispatcherServlet skaper WebApplicationContext ved å lese WEB-INF / {servletName} -servlet.xml
  4. Til slutt, DispatcherServlet registrerer bønnene som er definert i applikasjonssammenheng

Slik kommer vårstøvler med Servlet 3+ til:

  1. Containeren søker etter klasser som implementerer ServletContainerInitializer og utfører
  2. De SpringServletContainerInitializer finner alle klasser implementere WebApplicationInitializer
  3. De WebApplicationInitializer oppretter konteksten med XML eller @Konfigurasjon klasser
  4. De WebApplicationInitializer skaper DispatcherServlet med den tidligere opprettede konteksten.

7.2. Hvordan vårstøvler?

Inngangspunktet for en Spring Boot-applikasjon er klassen som er merket med @SpringBootApplication:

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

Som standard bruker Spring Boot en innebygd container for å kjøre applikasjonen. I dette tilfellet bruker Spring Boot offentlig statisk ugyldig hoved inngangspunkt for å starte en innebygd webserver.

Det tar også vare på bindingen av Servlet, filter, og ServletContextInitializer bønner fra applikasjonskonteksten til den innebygde servletbeholderen.

En annen funksjon ved Spring Boot er at den automatisk skanner alle klassene i samme pakke eller delpakker i hovedklassen for komponenter.

Spring Boot gir deg også muligheten til å distribuere det som et webarkiv i en ekstern container. I dette tilfellet må vi utvide SpringBootServletInitializer:

@SpringBootApplication public class Application utvider SpringBootServletInitializer {// ...}

Her ser den eksterne servletcontaineren etter hovedklassen definert i META-INF-filen i nettarkivet og SpringBootServletInitializer vil ta seg av å binde Servlet, filter, og ServletContextInitializer.

8. Emballasje og distribusjon

Til slutt, la oss se hvordan et program kan pakkes og distribueres. Begge disse rammene støtter de vanlige pakkehåndteringsteknologiene som Maven og Gradle. Men når det gjelder distribusjon, skiller disse rammene seg veldig.

For eksempel gir Spring Boot Maven Plugin Spring Boot-støtte i Maven. Det tillater også emballering av kjørbar krukke eller krigsarkiv og kjøring av et program på stedet.

Noen av fordelene med Spring Boot over Spring i forbindelse med distribusjon inkluderer:

  • Gir innebygd containerstøtte
  • Gjør det mulig å kjøre glassene uavhengig ved hjelp av kommandoen java -jar
  • Mulighet for å ekskludere avhengigheter for å unngå potensielle jar-konflikter når de distribueres i en ekstern container
  • Mulighet for å spesifisere aktive profiler når du distribuerer
  • Tilfeldig portgenerering for integrasjonstester

9. Konklusjon

I denne opplæringen har vi lært om forskjellene mellom vår og vårstøvel.

Med noen få ord kan vi si at Spring Boot bare er en utvidelse av Spring selv for å gjøre utvikling, testing og distribusjon mer praktisk.


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