Porovnanie medzi jarnou a jarnou topánkou

1. Prehľad

V tomto dokumente sa pozrieme na rozdiely medzi štandardnými rámcami Spring a Spring Boot.

Zameriame sa na to a prediskutujeme, ako sa moduly Spring, napríklad MVC a Security, líšia pri použití v jadre Spring oproti použitiu v Boote.

2. Čo je jar?

Jednoducho povedané, jarný rámec poskytuje komplexnú podporu infraštruktúry pre vývoj aplikácií Java.

Je vybavený niekoľkými príjemnými funkciami, ako je napríklad Dependency Injection, a modulmi, ktoré sú pripravené na okamžité použitie, napríklad:

  • Jar JDBC
  • Jarné MVC
  • Jarná bezpečnosť
  • Jarný AOP
  • Jarná ORM
  • Jarný test

Tieto moduly môžu drasticky znížiť čas vývoja aplikácie.

Napríklad v začiatkoch vývoja webu Java sme potrebovali napísať veľa štandardných kódov na vloženie záznamu do zdroja údajov. Ale pomocou JDBCTemplate jarného modulu JDBC ho môžeme zredukovať na niekoľko riadkov kódu iba s niekoľkými konfiguráciami.

3. Čo je Spring Boot?

Spring Boot je v podstate rozšírenie rámca Spring, ktoré eliminovalo konfigurácie štandardných štítkov požadované pre nastavenie aplikácie Spring.

Zaujíma názorný pohľad na platformu Spring, ktorá pripravila pôdu pre rýchlejší a efektívnejší vývojový ekosystém.

Tu je iba niekoľko funkcií funkcie Spring Boot:

  • Značné „štartovacie“ závislosti na zjednodušenie konfigurácie zostavenia a aplikácie
  • Zabudovaný server, aby sa predišlo zložitosti pri nasadzovaní aplikácií
  • Metriky, kontrola stavu a externá konfigurácia
  • Automatická konfigurácia jarných funkcií - kedykoľvek je to možné

Pozrime sa postupne na oba tieto rámce.

4. Maven závislosti

Najskôr sa pozrime na minimálne závislosti potrebné na vytvorenie webovej aplikácie pomocou jari:

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

Na rozdiel od jari vyžaduje Spring Boot na spustenie webovej aplikácie iba jednu závislosť:

 org.springframework.boot spring-boot-starter-web 2.3.4.VEREJNOSŤ 

Všetky ostatné závislosti sa do konečného archívu pridajú automaticky počas zostavovania.

Ďalším dobrým príkladom je testovanie knižníc. Zvyčajne používame množinu jarných testov, knižníc JUnit, Hamcrest a Mockito. V jarnom projekte by sme mali všetky tieto knižnice pridať ako závislosti.

Ale v Spring Boot potrebujeme iba závislosť štartéra na testovanie, aby sme tieto knižnice automaticky zahrnuli.

Spring Boot poskytuje množstvo závislostí štartéra pre rôzne moduly Spring. Medzi najčastejšie používané patria:

  • spring-boot-starter-data-jpa
  • zabezpečenie štartéra na jar-boot-štartér
  • test štartovacej pružiny
  • spring-boot-starter-web
  • spring-boot-starter-thymeleaf

Celý zoznam začiatočníkov nájdete tiež v jarnej dokumentácii.

5. Konfigurácia MVC

Poďme preskúmať konfiguráciu potrebnú na vytvorenie webovej aplikácie JSP pomocou Spring aj Spring Boot.

Jar vyžaduje definovanie servletu dispečera, mapovaní a ďalších podporných konfigurácií. Môžeme to urobiť buď pomocou web.xml spis alebo Inicializátor trieda:

public class MyWebAppInitializer implementuje WebApplicationInitializer {@Override public void onStartup (ServletContext container) {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.setConfigLocation ("com.baeldung"); container.addListener (nový ContextLoaderListener (kontext)); ServletRegistration.Dynamic dispečer = kontajner .addServlet ("dispečer", nový DispatcherServlet (kontext)); dispatcher.setLoadOnStartup (1); dispatcher.addMapping ("/"); }}

Musíme tiež pridať @EnableWebMvc anotácia k a @ Konfigurácia triedy a definovať rezolver pohľadov na vyriešenie pohľadov vrátených z radičov:

@EnableWebMvc @Configuration verejná trieda ClientWebConfig implementuje WebMvcConfigurer {@Bean public ViewResolver viewResolver () {InternalResourceViewResolver bean = nový InternalResourceViewResolver (); bean.setViewClass (JstlView.class); bean.setPrefix ("/ WEB-INF / view /"); bean.setSuffix (". jsp"); spätná fazuľa; }}

V porovnaní s tým všetkým, Spring Boot potrebuje na to, aby veci fungovali, len pár vlastností, akonáhle pridáme webový štartér:

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

Celá vyššie uvedená jarná konfigurácia je automaticky zahrnutá pridaním webového štartéra Boot prostredníctvom procesu nazývaného automatická konfigurácia.

To znamená, že Spring Boot sa bude zaoberať závislosťami, vlastnosťami a fazuľami, ktoré v aplikácii existujú, a na základe nich povolí konfiguráciu.

Samozrejme, ak chceme pridať vlastnú vlastnú konfiguráciu, automatická konfigurácia Spring Boot bude späť.

5.1. Konfigurácia šablónového modulu

Poďme sa teraz naučiť, ako nakonfigurovať a Thymeleaf šablónový modul v Spring aj Spring Boot.

Na jar musíme pridať thymeleaf-spring5 závislosť a niektoré konfigurácie pre rezolver pohľadu:

@Configuration @EnableWebMvc verejná trieda MvcWebConfig implementuje WebMvcConfigurer {@Autowired private ApplicationContext applicationContext; @Bean public SpringResourceTemplateResolver templateResolver () {SpringResourceTemplateResolver templateResolver = nový SpringResourceTemplateResolver (); templateResolver.setApplicationContext (applicationContext); templateResolver.setPrefix ("/ WEB-INF / zobrazenia /"); templateResolver.setSuffix (". html"); vrátiť templateResolver; } @Bean public SpringTemplateEngine templateEngine () {SpringTemplateEngine templateEngine = nový SpringTemplateEngine (); templateEngine.setTemplateResolver (templateResolver ()); templateEngine.setEnableSpringELCompiler (true); vrátiť templateEngine; } @Override public void configureViewResolvers (register ViewResolverRegistry) {ThymeleafViewResolver resolver = nový ThymeleafViewResolver (); resolver.setTemplateEngine (templateEngine ()); registry.viewResolver (resolver); }}

Spring Boot 1 vyžaduje iba závislosť od spring-boot-starter-thymeleaf umožniť Thymeleaf podpora vo webovej aplikácii. Ale kvôli novým funkciám v Thymeleaf3.0, musíme pridať thymeleaf-layout-dialect tiež ako závislosť vo webovej aplikácii Spring Boot 2. Prípadne môžeme zvoliť pridanie a spring-boot-starter-thymeleaf závislosť, ktorá sa o toto všetko postará za nás.

Keď sú závislosti na mieste, môžeme šablóny pridať do súboru src / main / resources / templates priečinok a Spring Boot ich zobrazí automaticky.

6. Jarná konfigurácia zabezpečenia

Kvôli jednoduchosti uvidíme, ako je pomocou týchto rámcov povolené predvolené základné overovanie HTTP.

Začnime tým, že sa pozrieme na závislosti a konfiguráciu, ktoré potrebujeme na to, aby sme umožnili zabezpečenie pomocou Spring.

Jar vyžaduje obidva štandardy jar-bezpecnostny web a spring-security-config závislosti nastaviť Zabezpečenie v aplikácii.

Ďalšie, musíme pridať triedu, ktorá rozširuje WebSecurityConfigurerAdapter a využíva @EnableWebSecurity anotácia:

@Configuration @EnableWebSecurity verejná trieda CustomWebSecurityConfigurerAdapter rozširuje WebSecurityConfigurerAdapter {@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) vyvolá výnimku {auth.inMemoryAuthentication () .withUser ("user1") .password (userEn)) („ROLE_USER“); } @Override protected void configure (HttpSecurity http) vyvolá výnimku {http.authorizeRequests () .anyRequest (). Authenticated (). A () .httpBasic (); } @Bean public PasswordEncoder passwordEncoder () {vrátiť nový BCryptPasswordEncoder (); }}

Tu používame inMemoryAuthentication na nastavenie autentifikácie.

Podobne aj Spring Boot vyžaduje, aby tieto závislosti fungovali. Musíme však definovať iba závislosťzabezpečenie jarného štartéra-štartéra pretože to automaticky pridá všetky príslušné závislosti do triedy.

Konfigurácia zabezpečenia v Spring Boot je rovnaká ako vyššie.

Ak potrebujete vedieť, ako je možné dosiahnuť konfiguráciu JPA v Spring aj Spring Boot, prečítajte si náš článok Sprievodca JPA s Spring.

7. Aplikácia Bootstrap

Základný rozdiel v bootstrapovaní aplikácie v Spring a Spring Boot spočíva v servlete. Jar používa buď web.xml alebo SpringServletContainerInitializer ako jeho vstupný bod bootstrap.

Na druhej strane Spring Boot používa na zavedenie aplikácie iba funkcie Servlet 3. Hovorme o tom podrobne.

7.1. Ako jarné bootstrapy?

Jar podporuje toto dedičstvo web.xml spôsob bootstrappingu ako aj najnovšia metóda Servlet 3+.

Pozrime sa na web.xml prístup v krokoch:

  1. Číta sa kontajner servletu (server) web.xml
  2. The DispatcherServlet definované v web.xml je inštanciou kontajnera
  3. DispatcherServlet vytvára WebApplicationContext čítaním WEB-INF / {servletName} -servlet.xml
  4. Nakoniec DispatcherServlet registruje fazuľa definované v kontexte aplikácie

Tu je ukážka toho, ako jarné bootstrapy využívajúce prístup Servlet 3+:

  1. Kontajner vyhľadáva implementujúce triedy ServletContainerInitializer a vykoná
  2. The SpringServletContainerInitializer nájde implementáciu všetkých tried WebApplicationInitializer
  3. The WebApplicationInitializer vytvára kontext pomocou XML alebo @ Konfigurácia triedy
  4. The WebApplicationInitializer vytvára DispatcherServlet s predtým vytvoreným kontextom.

7.2. Ako Spring Boot Bootstraps?

Vstupným bodom aplikácie Spring Boot je trieda, ktorá je anotovaná @SpringBootApplication:

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

V predvolenom nastavení používa Spring Boot na spustenie aplikácie vložený kontajner. V tomto prípade Spring Boot používa verejná statická neplatnosť hlavná vstupný bod na spustenie zabudovaného webového servera.

Tiež sa stará o viazanie Servlet, filter, a ServletContextInitializer fazuľa z kontextu aplikácie do vloženého kontajnera servletu.

Ďalšou vlastnosťou Spring Boot je, že automaticky prehľadáva všetky triedy v rovnakom balíku alebo čiastkových balíkoch hlavnej triedy, či neobsahuje komponenty.

Spring Boot poskytuje možnosť nasadiť ho ako webový archív aj do externého kontajnera. V takom prípade musíme rozšíriť SpringBootServletInitializer:

Verejná trieda aplikácie @SpringBootApplication rozširuje SpringBootServletInitializer {// ...}

Tu externý servletový kontajner vyhľadáva triedu Main definovanú v súbore META-INF webového archívu a SpringBootServletInitializer sa postará o viazanie Servlet, filter, a ServletContextInitializer.

8. Balenie a nasadenie

Na záver sa pozrime, ako je možné aplikáciu zbaliť a nasadiť. Oba tieto rámce podporujú spoločné technológie na správu balíkov ako Maven a Gradle. Pokiaľ však ide o nasadenie, tieto rámce sa veľmi líšia.

Napríklad Spring Boot Maven Plugin poskytuje podporu Spring Boot v Maven. Umožňuje tiež zabaliť spustiteľný archív alebo vojnové archívy a spustiť aplikáciu „na mieste“.

Medzi výhody Spring Boot oproti Spring v kontexte nasadenia patria:

  • Poskytuje podporu vloženého kontajnera
  • Rezerva na nezávislé spúšťanie pohárov pomocou príkazu java -jar
  • Možnosť vylúčenia závislostí, aby sa zabránilo potenciálnym konfliktom jar pri nasadení do externého kontajnera
  • Možnosť určiť aktívne profily pri nasadení
  • Náhodné generovanie portov pre integračné testy

9. Záver

V tomto tutoriáli sme sa dozvedeli o rozdieloch medzi Spring a Spring Boot.

V niekoľkých slovách môžeme povedať, že Spring Boot je iba rozšírením samotného Springu, aby bol vývoj, testovanie a nasadenie pohodlnejšie.