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:
- Číta sa kontajner servletu (server) web.xml
- The DispatcherServlet definované v web.xml je inštanciou kontajnera
- DispatcherServlet vytvára WebApplicationContext čítaním WEB-INF / {servletName} -servlet.xml
- 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+:
- Kontajner vyhľadáva implementujúce triedy ServletContainerInitializer a vykoná
- The SpringServletContainerInitializer nájde implementáciu všetkých tried WebApplicationInitializer
- The WebApplicationInitializer vytvára kontext pomocou XML alebo @ Konfigurácia triedy
- 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.