欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring和SpringBoot之間的區(qū)別

 更新時間:2021年04月01日 08:32:02   作者:老K  
這篇文章主要介紹了Spring和SpringBoot之間的區(qū)別,幫助大家更好的理解和學(xué)習(xí)使用這兩種框架,感興趣的朋友可以了解下

在本教程中,我們將研究標(biāo)準(zhǔn)Spring框架和Spring Boot之間的區(qū)別。

我們將重點討論Spring的模塊,如MVC和Security,在核心Spring中使用時與在Boot中使用時的區(qū)別。

Spring是什么?

簡單地說,Spring框架為開發(fā)Java應(yīng)用程序提供了全面的基礎(chǔ)設(shè)施支持。

它包含了一些很好的功能,比如依賴注入,以及一些現(xiàn)成的模塊,比如:

  • Spring JDBC
  • Spring MVC
  • Spring Security
  • Spring AOP
  • Spring ORM
  • Spring Test

這些模塊可以大大縮短應(yīng)用程序的開發(fā)時間。

例如,在java web開發(fā)的早期,我們需要編寫大量樣板代碼來將記錄插入到數(shù)據(jù)源中。通過使用springjdbc模塊的JDBCTemplate,我們可以用很少的配置將它簡化為幾行代碼。

Spring Boot是什么?

Spring Boot基本上是Spring框架的擴展,它消除了設(shè)置Spring應(yīng)用程序所需的樣板配置。

它對Spring平臺持固執(zhí)己見的觀點,它為更快、更高效的開發(fā)生態(tài)系統(tǒng)鋪平了道路。

以下是Spring Boot的一些功能:

  • 持約定優(yōu)于配置的“starter”依賴關(guān)系,以簡化構(gòu)建和應(yīng)用程序配置
  • 嵌入式服務(wù)器避免了應(yīng)用程序部署的復(fù)雜性
  • 度量、運行狀況檢查和外部化配置
  • 自動配置-只要可能

讓我們逐步熟悉這兩個框架。

Maven依賴項

首先,讓我們看看使用Spring創(chuàng)建web應(yīng)用程序所需的最小依賴性:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.3.5</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.3.5</version>
</dependency>

與Spring不同,Spring Boot只需要一個依賴項即可啟動并運行web應(yīng)用程序:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <version>2.4.4</version>
</dependency>

在構(gòu)建期間,所有其他依賴項都會自動添加到最終存檔中。

另一個很好的例子是測試庫。我們通常使用一組Spring-Test、JUnit、Hamcrest和Mockito庫。在Spring項目中,我們應(yīng)該添加所有這些庫作為依賴項。

或者,在springboot中,我們只需要starter依賴項就可以自動包含這些庫。

springboot為不同的Spring模塊提供了許多啟動程序依賴項。最常用的方法有:

  • spring-boot-starter-data-jpa
  • spring-boot-starter-security
  • spring-boot-starter-test
  • spring-boot-starter-web
  • spring-boot-starter-thymeleaf

要獲得starters的完整列表,還可以查看Spring文檔:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter

MVC配置

讓我們研究一下使用Spring和SpringBoot創(chuàng)建jsp web應(yīng)用程序所需的配置。

Spring需要定義dispatcherservlet、映射和其他支持配置。我們可以用web.xml文件或初始值設(shè)定項類:

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

我們還需要將@EnableWebMvc注釋添加到@Configuration類中,并定義一個視圖解析器來解析從控制器返回的視圖:

@EnableWebMvc
@Configuration
public class ClientWebConfig implements WebMvcConfigurer { 
  @Bean
  public ViewResolver viewResolver() {
   InternalResourceViewResolver bean
    = new InternalResourceViewResolver();
   bean.setViewClass(JstlView.class);
   bean.setPrefix("/WEB-INF/view/");
   bean.setSuffix(".jsp");
   return bean;
  }
}

相比之下,在添加web starter后,Spring Boot只需要幾個屬性就可以工作:

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

通過一個名為auto-configuration的process添加bootwebstarter,上面所有的Spring配置都會自動包含進(jìn)來。

這意味著springboot將查看應(yīng)用程序中存在的依賴項、屬性和bean,并基于它們啟用配置。

當(dāng)然,如果我們想添加我們自己的自定義配置,那么Spring-Boot自動配置就會退出。

配置模板引擎

現(xiàn)在讓我們學(xué)習(xí)如何在Spring和springboot中配置Thymeleaf模板引擎。

在Spring中,我們需要為視圖解析器添加thymeleaf-spring5依賴項和一些配置:

@Configuration
@EnableWebMvc
public class MvcWebConfig implements WebMvcConfigurer {

  @Autowired
  private ApplicationContext applicationContext;

  @Bean
  public SpringResourceTemplateResolver templateResolver() {
    SpringResourceTemplateResolver templateResolver = 
     new SpringResourceTemplateResolver();
    templateResolver.setApplicationContext(applicationContext);
    templateResolver.setPrefix("/WEB-INF/views/");
    templateResolver.setSuffix(".html");
    return templateResolver;
  }

  @Bean
  public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());
    templateEngine.setEnableSpringELCompiler(true);
    return templateEngine;
  }

  @Override
  public void configureViewResolvers(ViewResolverRegistry registry) {
    ThymeleafViewResolver resolver = new ThymeleafViewResolver();
    resolver.setTemplateEngine(templateEngine());
    registry.viewResolver(resolver);
  }
}

SpringBoot只需要springbootstarter thymeleaf的依賴性就可以在web應(yīng)用程序中啟用thymeleaf支持。由于Thymeleaf3.0中的新特性,我們還必須在springboot2web應(yīng)用程序中添加thymeleaf-layout-dialect作為依賴項。或者,我們可以選擇添加一個springbootstarter和eleaf依賴,它將為我們處理所有這些。

一旦依賴項就位,我們就可以將模板添加到src/main/resources/templates文件夾中,Spring引導(dǎo)將自動顯示它們。

Spring Security 配置

為了簡單起見,我們將看到如何使用這些框架啟用默認(rèn)的HTTP基本身份驗證。

讓我們先看看使用Spring啟用安全性所需的依賴項和配置。

Spring需要標(biāo)準(zhǔn)的springsecurityweb和springsecurityconfig依賴項來設(shè)置應(yīng)用程序中的安全性。

接下來,我們需要添加一個類來擴展WebSecurityConfigureAdapter并使用@EnableWebSecurity注釋:

@Configuration
@EnableWebSecurity
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
 
  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
     .withUser("user1")
      .password(passwordEncoder()
      .encode("user1Pass"))
     .authorities("ROLE_USER");
  }
 
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
     .anyRequest().authenticated()
     .and()
     .httpBasic();
  }
  
  @Bean
  public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
  }
}

這里我們使用inMemoryAuthentication來設(shè)置身份驗證。

springboot還需要這些依賴項才能工作,但是我們只需要定義spring-boot-starter-security的依賴項,因為這樣會自動將所有相關(guān)的依賴項添加到classpath類路徑中。

springboot中的security安全配置與上面的相同。

要了解如何在Spring和Spring引導(dǎo)中實現(xiàn)JPA配置,我們可以查看我們的文章A Guide To JPA with Spring:https://www.baeldung.com/the-persistence-layer-with-spring-and-jpa

Application Bootstrap

在Spring和Spring引導(dǎo)中引導(dǎo)應(yīng)用程序的基本區(qū)別在于servlet。Spring使用web.xml或SpringServletContainerInitializer作為其引導(dǎo)入口點。

另一方面,SpringBoot只使用Servlet3特性來引導(dǎo)應(yīng)用程序。我們來詳細(xì)談?wù)劇?/p>

Spring如何引導(dǎo)?

Spring既支持傳統(tǒng)的web.xml引導(dǎo)方式以及最新的Servlet3+方法。

讓我們看看web.xml分步進(jìn)近:

1. Servlet容器(服務(wù)器)讀取web.xml.

2.DispatcherServlet定義在web.xml中由容器實例化。

3. DispatcherServlet通過讀取WEB-INF/{servletName}創(chuàng)建WebApplicationContext-servlet.xml.

4. 最后,DispatcherServlet注冊在應(yīng)用程序上下文中定義的bean。

下面是如何使用Servlet3+方法進(jìn)行Spring引導(dǎo):

1. 容器搜索實現(xiàn)ServletContainerInitializer的類并執(zhí)行。

2. SpringServletContainerInitializer查找實現(xiàn)WebApplicationInitializer的所有類。

3. WebApplicationInitializer使用XML或@Configuration類創(chuàng)建上下文。

4. WebApplicationInitializer使用先前創(chuàng)建的上下文創(chuàng)建DispatcherServlet。

如何啟動Spring Boot?

Spring Boot應(yīng)用程序的入口點是用@SpringBootApplication注釋的類:

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

默認(rèn)情況下,springboot使用嵌入式容器來運行應(yīng)用程序。在本例中,springboot使用public static void主入口點來啟動嵌入式web服務(wù)器。

它還負(fù)責(zé)將Servlet、Filter和servletContextInitializerbean從應(yīng)用程序上下文綁定到嵌入式Servlet容器。

springboot的另一個特性是,它自動掃描主類的同一個包或子包中的所有類中的組件。

此外,springboot還提供了將其部署為外部容器中的web存檔的選項。在這種情況下,我們必須擴展SpringBootServletInitializer:

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

在這里,外部servlet容器查找在web存檔的META-INF文件中定義的主類,SpringBootServletInitializer將負(fù)責(zé)綁定servlet、過濾器和ServletContextInitializer。

打包和部署

最后,讓我們看看如何打包和部署應(yīng)用程序。這兩個框架都支持Maven和Gradle等常見的包管理技術(shù);但是,在部署方面,這些框架有很大的不同。

例如,springboot maven插件在Maven中提供springboot支持。它還允許打包可執(zhí)行jar或war,并“就地”運行應(yīng)用程序

在部署環(huán)境中,Spring Boot優(yōu)于Spring的一些優(yōu)點包括:

  • 提供嵌入式容器支持
  • 設(shè)置為使用命令java-jar獨立運行jar
  • 用于排除依賴項的選項,以避免在外部容器中部署時發(fā)生潛在的jar沖突
  • 用于在部署時指定活動配置文件的選項
  • 集成測試的隨機端口生成

結(jié)論

在本文中,我們了解了Spring和Spring Boot之間的區(qū)別。

簡而言之,我們可以說springboot只是Spring本身的一個擴展,它使開發(fā)、測試和部署更加方便。

以上就是Spring和SpringBoot之間的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于Spring和SpringBoot區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mybatis中使用in()查詢的方式詳解

    Mybatis中使用in()查詢的方式詳解

    當(dāng)參數(shù)有值,添加條件查詢,附帶一個字符串的in查詢,下面這篇文章主要給大家介紹了關(guān)于Mybatis中使用in()查詢的方式,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Spring框架中部署log4j.xml的詳細(xì)步驟

    Spring框架中部署log4j.xml的詳細(xì)步驟

    Log4j是一個常用的日志記錄工具,它可以幫助我們記錄應(yīng)用程序的運行日志并進(jìn)行靈活的配置,在Spring框架中,我們可以很方便地部署log4j.xml配置文件來管理日志記錄,這篇文章主要介紹了Spring框架中部署log4j.xml的詳細(xì)步驟并提供相應(yīng)的代碼示例,需要的朋友可以參考下
    2023-09-09
  • 圖解Spring Security 中用戶是如何實現(xiàn)登錄的

    圖解Spring Security 中用戶是如何實現(xiàn)登錄的

    這篇文章主要介紹了圖解Spring Security 中用戶是如何實現(xiàn)登錄的,文中通過示例代碼和圖片介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 2021年最新Redis面試題匯總(4)

    2021年最新Redis面試題匯總(4)

    在程序員面試過程中redis相關(guān)的知識是常被問到的話題。這篇文章主要介紹了幾道Redis面試題,整理一下分享給大家,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 深入解析Java的Servlet過濾器的原理及其應(yīng)用

    深入解析Java的Servlet過濾器的原理及其應(yīng)用

    這篇文章主要介紹了深入解析Java的Servlet過濾器的原理及應(yīng)用,Java編寫的Servlet通常是一個與網(wǎng)頁一起作用于瀏覽器客戶端的程序,需要的朋友可以參考下
    2016-01-01
  • Java中String類常用方法總結(jié)詳解

    Java中String類常用方法總結(jié)詳解

    String類是一個很常用的類,是Java語言的核心類,用來保存代碼中的字符串常量的,并且封裝了很多操作字符串的方法。本文為大家總結(jié)了一些String類常用方法的使用,感興趣的可以了解一下
    2022-08-08
  • JavaWeb項目Servlet無法訪問問題解決

    JavaWeb項目Servlet無法訪問問題解決

    這篇文章主要介紹了JavaWeb項目Servlet無法訪問問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java線程安全和鎖Synchronized知識點詳解

    Java線程安全和鎖Synchronized知識點詳解

    在本篇文章里小編給大家分享的是關(guān)于Java線程安全和鎖Synchronized相關(guān)知識點,有需要的朋友們可以參考下。
    2019-08-08
  • JAVA實現(xiàn)心跳檢測(長連接)

    JAVA實現(xiàn)心跳檢測(長連接)

    本文主要介紹了JAVA實現(xiàn)心跳檢測(長連接),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • SpringCloud中NacosNamingService的作用詳解

    SpringCloud中NacosNamingService的作用詳解

    這篇文章主要介紹了SpringCloud中NacosNamingService的作用詳解,NacosNamingService類完成服務(wù)實例注冊,撤銷與獲取服務(wù)實例操作,NacosNamingService初始化采用單例模式,使用反射生成,需要的朋友可以參考下
    2023-11-11

最新評論