A tavaszi és a tavaszi csizma összehasonlítása

1. Áttekintés

Ebben az írásban megvizsgáljuk a szokásos tavaszi keretek és a rugós csomagtartó közötti különbségeket.

Arra összpontosítunk és megvitatjuk, hogy a Spring moduljai, mint az MVC és a Security, hogyan különböznek egymástól, ha a Core Spring-ben használják őket, szemben a Boot-tal.

2. Mi az a tavasz?

Egyszerűen fogalmazva: a tavaszi keret átfogó infrastrukturális támogatást nyújt a Java alkalmazások fejlesztéséhez.

Tele van néhány olyan szép funkcióval, mint a Dependency Injection, és a dobozból kivett modulok, például:

  • Tavaszi JDBC
  • Tavaszi MVC
  • Tavaszi biztonság
  • Tavaszi AOP
  • Tavaszi ORM
  • Tavaszi teszt

Ezek a modulok drasztikusan csökkenthetik egy alkalmazás fejlesztési idejét.

Például a Java webfejlesztés korai szakaszában sok kazán kódot kellett írnunk ahhoz, hogy rekordot illesszünk be az adatforrásba. De a JDBCTemplate a Spring JDBC modulból néhány kódsorra redukálhatjuk, csak néhány konfigurációval.

3. Mi az a tavaszi csizma?

A Spring Boot alapvetően a Spring keretrendszer kiterjesztése, amely kiküszöbölte a Spring alkalmazás beállításához szükséges kazán konfigurációkat.

A tavaszi platform véleményes nézete, amely utat nyitott egy gyorsabb és hatékonyabb ökoszisztéma-fejlesztés számára.

Íme néhány a Spring Boot szolgáltatásai közül:

  • Véleményezett „indító” függőségek az összeállítás és az alkalmazás konfigurálásának egyszerűsítése érdekében
  • Beágyazott szerver az alkalmazás telepítésének összetettségének elkerülése érdekében
  • Mutatók, állapotfelmérés és külső konfiguráció
  • Automatikus konfiguráció a Spring funkcióhoz - amikor csak lehetséges

Ismerkedjünk meg mindkettővel mindkét lépésről lépésre.

4. Maven-függőségek

Először nézzük meg a webalkalmazás Spring használatához szükséges minimális függőségeket:

 org.springframework spring-web 5.2.9. KÖZLEMÉNY org.springframework spring-webmvc 5.2.9. 

A tavasszal ellentétben a Spring Boot csak egy függőséget igényel egy webalkalmazás működéséhez:

 org.springframework.boot spring-boot-starter-web 2.3.4.KÖZLEMÉNY 

Az összes többi függőség automatikusan hozzáadódik a végső archívumhoz a készítés ideje alatt.

Egy másik jó példa a könyvtárak tesztelése. Általában a Spring Test, a JUnit, a Hamcrest és a Mockito könyvtárakat használjuk. Egy tavaszi projektben ezeket a könyvtárakat hozzá kell adnunk függőségként.

De a Spring Boot programban csak a kezdőfüggőségre van szükségünk a teszteléshez, hogy automatikusan bekerüljenek ezek a könyvtárak.

A Spring Boot számos indítófüggőséget biztosít a különböző Spring modulokhoz. Néhány leggyakrabban használt:

  • spring-boot-starter-data-jpa
  • spring-boot-starter-security
  • tavasz-csomagtartó-indító-teszt
  • tavasz-boot-starter-web
  • tavaszi-bakancs-indító-timeleaf

Az indulók teljes listáját a Spring dokumentációban találja.

5. MVC konfiguráció

Fedezzük fel a JSP webalkalmazás létrehozásához szükséges konfigurációt mind a Spring, mind a Spring Boot segítségével.

A tavaszhoz meg kell határozni a diszpécser kiszolgáló kisalkalmazását, leképezéseit és egyéb támogató konfigurációit. Megtehetjük ezt akár a web.xml fájl vagy egy Inicializáló osztály:

public class MyWebAppInitializer implementálja a WebApplicationInitializer {@Override public void onStartup (ServletContext container) {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.setConfigLocation ("com.baeldung"); container.addListener (új ContextLoaderListener (context)); ServletRegistration.Dynamic diszpécser = container .addServlet ("diszpécser", új DispatcherServlet (kontextus)); diszpécser.setLoadOnStartup (1); diszpécser.addMapping ("/"); }}

Hozzá kell adnunk a @EnableWebMvc kommentár a @ Konfiguráció osztály és definiáljon egy nézetmegoldót a vezérlőktől visszaküldött nézetek megoldásához:

@EnableWebMvc @Configuration nyilvános osztály A ClientWebConfig megvalósítja a WebMvcConfigurer {@Bean public ViewResolver viewResolver () {InternalResourceViewResolver bean = new InternalResourceViewResolver (); bean.setViewClass (JstlView.class); bean.setPrefix ("/ WEB-INF / nézet /"); bean.setSuffix (". jsp"); visszatérő bab; }}

Mindehhez képest A Spring Boot-nak csak néhány tulajdonságra van szüksége a dolgok működéséhez, miután hozzáadtuk a webes indítót:

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

A fenti tavaszi konfiguráció automatikusan bekerül a Boot webes indító hozzáadásával, az úgynevezett automatikus konfiguráció útján.

Ez azt jelenti, hogy a Spring Boot megvizsgálja az alkalmazásban meglévő függőségeket, tulajdonságokat és babokat, és ezek alapján engedélyezi a konfigurációt.

Természetesen, ha hozzá akarjuk adni saját egyéni konfigurációnkat, akkor a Spring Boot automatikus konfiguráció visszaáll.

5.1. A sablonmotor konfigurálása

Tanuljuk meg, hogyan kell konfigurálni a Thymeleaf sablon motor mind a tavaszi, mind a tavaszi csomagtartóban.

Tavasszal hozzá kell adnunk a kakukkfű-tavasz5 függőség és a nézetmegoldó néhány konfigurációja:

@Configuration @EnableWebMvc public class Az MvcWebConfig megvalósítja a WebMvcConfigurer {@Autowired private ApplicationContext applicationContext; @Bean public SpringResourceTemplateResolver templateResolver () {SpringResourceTemplateResolver templateResolver = új SpringResourceTemplateResolver (); templateResolver.setApplicationContext (applicationContext); templateResolver.setPrefix ("/ WEB-INF / nézetek /"); templateResolver.setSuffix (". html"); return templateResolver; } @Bean public SpringTemplateEngine templateEngine () {SpringTemplateEngine templateEngine = új SpringTemplateEngine (); templateEngine.setTemplateResolver (templateResolver ()); templateEngine.setEnableSpringELCompiler (true); return templateEngine; } @Orride public void configureViewResolvers (ViewResolverRegistry register) {ThymeleafViewResolver resolver = new ThymeleafViewResolver (); resolver.setTemplateEngine (templateEngine ()); register.viewResolver (resolver); }}

A Spring Boot 1 csak a függőséget igényelte tavaszi-bakancs-indító-timeleaf engedélyezni Thymeleaf támogatás egy webalkalmazásban. De az új funkciók miatt Thymeleaf3.0, hozzá kell tennünk thymeleaf-layout-dialektus a Spring Boot 2 webalkalmazás függőségeként is. Alternatív megoldásként választhatunk egy a-t tavaszi-bakancs-indító-timeleaf függőség, amely gondoskodik minderről számunkra.

Amint a függőségek a helyükön vannak, hozzáadhatjuk a sablonokat a src / main / resources / templates mappa és a Spring Boot automatikusan megjeleníti őket.

6. Tavaszi biztonsági konfiguráció

Az egyszerűség kedvéért meglátjuk, hogyan engedélyezi az alapértelmezett HTTP Basic hitelesítést ezek a keretek.

Kezdjük azzal, hogy megvizsgáljuk azokat a függőségeket és konfigurációkat, amelyekre szükségünk van a Biztonság engedélyezéséhez a Spring használatával.

A tavasz mind a színvonalat megköveteli tavasz-biztonsági web és spring-security-config függőségek a Biztonság beállításához egy alkalmazásban.

Következő, hozzá kell adnunk egy osztályt, amely kiterjeszti a WebSecurityConfigurerAdapter és felhasználja a @EnableWebSecurity kommentár:

A @Configuration @EnableWebSecurity nyilvános osztály A CustomWebSecurityConfigurerAdapter kiterjeszti a WebSecurityConfigurerAdapter {@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kivételeket dobja {auth.inMemoryAuthentication () .withEser ("user1". ("ROLE_USER"); } A @Orride protected void configure (HttpSecurity http) dobja a Kivételt {http.authorizeRequests () .anyRequest (). Hitelesített () .és () .httpBasic (); } @Bean public PasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }}

Itt használjuk inMemoryAuthentication a hitelesítés beállításához.

Hasonlóképpen, a Spring Boot is megköveteli ezeket a függőségeket annak működéséhez. De csak a függőségét kell meghatároznunkspring-boot-starter-security mivel ez automatikusan hozzáadja az összes releváns függőséget az osztályútvonalhoz.

A Spring Boot biztonsági konfigurációja megegyezik a fenti konfigurációval.

Ha tudnia kell, hogyan érhető el a JPA-konfiguráció mind a tavaszi, mind a tavaszi rendszerindítás során, olvassa el Az Útmutató a JPA-hoz tavasszal című cikkünket.

7. Alkalmazás Bootstrap

A tavaszi és a tavaszi rendszerindítás során az alkalmazás indításának alapvető különbsége a szervletben rejlik. A tavasz vagy a web.xml vagy SpringServletContainerInitializer mint bootstrap belépési pont.

Másrészt a Spring Boot csak a Servlet 3 szolgáltatásait használja az alkalmazások indításához. Beszéljünk erről részletesen.

7.1. Hogyan tavaszi Bootstraps?

A tavasz mind az örökséget támogatja web.xml a rendszerindítás módja, valamint a legújabb Servlet 3+ módszer.

Lássuk a web.xml megközelítés lépésenként:

  1. A Servlet-konténer (a kiszolgáló) beolvas web.xml
  2. A DispatcherServlet meghatározta a web.xml a konténer példázza
  3. DispatcherServlet teremt WebApplicationContext olvasva WEB-INF / {szervletNév} -servlet.xml
  4. Végül a DispatcherServlet regisztrálja az alkalmazás környezetében definiált babokat

A tavaszi bootstrapok a Servlet 3++ megközelítést használva:

  1. A tároló végrehajtási osztályokat keres ServletContainerInitializer és végrehajtja
  2. A SpringServletContainerInitializer minden osztályt megvalósítónak talál WebApplicationInitializer
  3. A WebApplicationInitializer létrehozza a kontextust XML vagy @ Konfiguráció osztályok
  4. A WebApplicationInitializer létrehozza a DispatcherServlet a korábban létrehozott kontextussal.

7.2. Hogyan tavaszi boot bakancs?

A Spring Boot alkalmazás belépési pontja az az osztály, amellyel jegyzetelt @SpringBootApplication:

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

Alapértelmezés szerint a Spring Boot egy beágyazott tárolót használ az alkalmazás futtatásához. Ebben az esetben a Spring Boot a public static void main belépési pont beágyazott webszerver elindításához.

Ezenkívül gondoskodik a Servlet, szűrő, és ServletContextInitializer babot az alkalmazási kontextustól a beágyazott servlet tárolóig.

A Spring Boot másik jellemzője, hogy automatikusan megvizsgálja a Main-osztály ugyanazon csomagjában vagy alcsomagjaiban lévő összes osztályt az összetevők után.

A Spring Boot lehetőséget kínál arra, hogy webes archívumként egy külső tárolóba is telepítse. Ebben az esetben ki kell terjesztenünk a SpringBootServletInitializer:

A @SpringBootApplication public class alkalmazás kiterjeszti a SpringBootServletInitializer alkalmazást {// ...}

Itt a külső szervlet-konténer keresi a webarchívum META-INF fájljában definiált Main-osztályt és a SpringBootServletInitializer gondoskodni fog a Servlet, szűrő, és ServletContextInitializer.

8. Csomagolás és telepítés

Végül nézzük meg, hogyan lehet egy alkalmazást csomagolni és telepíteni. Mindkét keret támogatja a közös csomagkezelő technológiákat, mint például a Maven és a Gradle. De ami a telepítést illeti, ezek a keretrendszerek nagyon különböznek egymástól.

Például a Spring Boot Maven beépülő modul biztosítja a Spring Boot támogatást Mavenben. Ez lehetővé teszi a futtatható jar vagy háborús archívumok csomagolását és egy alkalmazás „helyben” futtatását is.

A Spring Boot néhány előnye a Springrel szemben a telepítés összefüggésében a következők:

  • Beágyazott tárolótámogatást nyújt
  • Gondoskodás az üvegek önálló futtatására a parancs használatával java -jar
  • Lehetőség a függőségek kizárására, hogy elkerülhetők legyenek az esetleges ütközési konfliktusok, ha külső tárolóba helyezi őket
  • Lehetőség aktív profilok megadására a telepítés során
  • Véletlen port generálás integrációs tesztekhez

9. Következtetés

Ebben az oktatóanyagban megismerhettük a tavaszi és a tavaszi indítás közötti különbségeket.

Néhány szóval azt mondhatjuk, hogy a Spring Boot egyszerűen maga a Spring kiterjesztése a fejlesztés, tesztelés és telepítés kényelmesebbé tétele érdekében.