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:
- A Servlet-konténer (a kiszolgáló) beolvas web.xml
- A DispatcherServlet meghatározta a web.xml a konténer példázza
- DispatcherServlet teremt WebApplicationContext olvasva WEB-INF / {szervletNév} -servlet.xml
- 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:
- A tároló végrehajtási osztályokat keres ServletContainerInitializer és végrehajtja
- A SpringServletContainerInitializer minden osztályt megvalósítónak talál WebApplicationInitializer
- A WebApplicationInitializer létrehozza a kontextust XML vagy @ Konfiguráció osztályok
- 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.