亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring和SpringBoot比較及區(qū)別解惑

 更新時間:2020年06月22日 11:11:29   作者:weixin_43770982  
這篇文章主要介紹了Spring和SpringBoot比較解惑區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1、概述:

對于 Spring 和 SpringBoot 到底有什么區(qū)別,我聽到了很多答案,剛開始邁入學習 SpringBoot 的我當時也是一頭霧水,隨著經(jīng)驗的積累、我慢慢理解了這兩個框架到底有什么區(qū)別,我相信對于用了 SpringBoot 很久的開發(fā)人員來說,有絕大部分還不是很理解 SpringBoot 到底和 Spring 有什么區(qū)別,看完文章中的比較,或許你有了不同的答案和看法!

2、什么是Spring呢?

先來聊一聊 Spring 作為 Java 開發(fā)人員,大家都 Spring 可不陌生,簡而言之, Spring 框架為開發(fā) Java 應用程序提供了全面的基礎架構支持。它包含一些很好的功能,如依賴注入和開箱即用的模塊,如:

Spring JDBC 、Spring MVC 、Spring Security、 Spring AOP 、Spring ORM 、Spring Test 

這些模塊大家應該都用過吧,這些模塊縮短應用程序的開發(fā)時間,提高了應用開發(fā)的效率

例如,在 Java Web 開發(fā)的早期階段,我們需要編寫大量的代碼來將記錄插入到數(shù)據(jù)源中。但是通過使用 Spring JDBC 模塊的 JDBCTemplate ,我們可以將這操作簡化為只需配置幾行代碼。

3、什么是Spring Boot呢?

Spring Boot 基本上是 Spring 框架的擴展,它消除了設置 Spring 應用程序所需的 XML配置,為更快,更高效的開發(fā)生態(tài)系統(tǒng)鋪平了道路。

以下是 Spring Boot 中的一些特點:

1:創(chuàng)建獨立的 spring 應用。

2:嵌入 Tomcat , Jetty Undertow 而且不需要部署他們。

3:提供的“starters” poms來簡化 Maven 配置

4:盡可能自動配置 spring 應用。

5:提供生產(chǎn)指標,健壯檢查和外部化配置

6:絕對沒有代碼生成和 XML 配置要求

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

4.1、 Maven依賴

首先,讓我們看一下使用Spring創(chuàng)建Web應用程序所需的最小依賴項 

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

與Spring不同,Spring Boot只需要一個依賴項來啟動和運行Web應用程序: 

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

在進行構建期間,所有其他依賴項將自動添加到項目中。

另一個很好的例子就是測試庫。我們通常使用 Spring Test , JUnit , Hamcrest 和 Mockito 庫。在 Spring 項目中,我們應該將所有這些庫添加為依賴項。但是在 Spring Boot中 ,我們只需要添加 spring-boot-starter-test 依賴項來自動包含這些庫。

Spring Boot為不同的Spring模塊提供了許多依賴項。一些最常用的是:

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

4.2、MVC配置

讓我們來看一下 Spring 和 Spring Boot 創(chuàng)建 JSP Web 應用程序所需的配置。

Spring 需要定義調(diào)度程序 servlet ,映射和其他支持配置。我們可以使用 web.xml 文件或 Initializer 類來完成此操作: 

public class MyWebAppInitializer implements WebApplicationInitializer { 
   
    @Override 
    public void onStartup(ServletContext container) { 
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
        context.setConfigLocation("com.pingfangushi"); 
          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 啟動程序, Spring Boot 只需要在 application 配置文件中配置幾個屬性來完成如上操作: 

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

上面的所有Spring配置都是通過一個名為auto-configuration的過程添加 Boot web starter 來自動包含的。

這意味著 Spring Boot 將查看應用程序中存在的依賴項,屬性和 bean ,并根據(jù)這些依賴項,對屬性和 bean 進行配置。當然,如果我們想要添加自己的自定義配置,那么 Spring Boot 自動配置將會退回。

4.3、配置模板引擎

現(xiàn)在我們來看下如何在Spring和Spring Boot中配置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); 
    } 
} 

SpringBoot1X 只需要 spring-boot-starter-thymeleaf 的依賴 項 來啟用 Web 應用程序中的        Thymeleaf 支持。但是由于 Thymeleaf3.0 中的新功能, 我們必須將 thymeleaf-layout-dialect 添加 為 SpringBoot2X Web應用程序中的依賴項。一旦依賴關系到位,我們就可以將模板添加到 src/main/resources/templates 文件夾中, SpringBoot 將自動顯示它們。

4.4、Spring Security 配置

為簡單起見,我們使用框架默認的 HTTP Basic 身份驗證。讓我們首先看一下使用 Spring 啟用Security 所需的依賴關系和配置。

Spring 首先需要依賴 spring-security-web 和 spring-security-config 模塊。接下來, 我們需要添加一個擴展 WebSecurityConfigurerAdapter 的類,并使用 @EnableWebSecurity 注解: 

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

這里我們使用 inMemoryAuthentication 來設置身份驗證。同樣, Spring Boot 也需要這些依賴項才能使其工作。但是我們只需要定義 spring-boot-starter-security 的依賴關系,因為這會自動將所有相關的依賴項添加到類路徑中。

Spring Boot 中的安全配置與上面的相同。

5、應用程序引導配置

Spring 和 Spring Boot 中應用程序引導的基本區(qū)別在于 servlet 。

Spring 使用 web.xml 或 SpringServletContainerInitializer 作為其引導入口點。

Spring Boot 僅使用 Servlet 3 功能來引導應用程序,下面讓我們詳細來了解下

5.1、Spring 是怎樣引導配置的呢?

Spring 支持傳統(tǒng)的 web.xml 引導方式以及最新的 Servlet 3+ 方法。

讓我們看一下 web.xml 方法的步驟:

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

web.xml 中定義的 DispatcherServlet 由容器實例化

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

最后, DispatcherServlet 注冊在應用程序上下文中定義的 bean

以下是使用 Servlet 3+ 方法的 Spring 引導:

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

SpringServletContainerInitializer 找到實現(xiàn)所有類 WebApplicationInitializer 

WebApplicationInitializer 創(chuàng)建具有XML或上下文 @Configuration 類

WebApplicationInitializer 創(chuàng)建 DispatcherServlet 的 與先前創(chuàng)建的上下文。

5.2、SpringBoot 有是如何配置的呢?

Spring Boot應用程序的入口點是使用@SpringBootApplication注釋的類: 

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

默認情況下, Spring Boot 使用嵌入式容器來運行應用程序。在這種情況下, Spring Boot 使用 public static void main 入口點來啟動嵌入式 Web 服務器。此外,它還負責將 Servlet ,Filter 和 ServletContextInitializer bean 從應用程序上下文綁定到嵌入式 servlet 容器。

Spring Boot 的另一個特性是它會自動掃描同一個包中的所有類或 Main 類的子包中的組件。

Spring Boot 提供了將其部署到外部容器的方式。在這種情況下,我們必須擴展 SpringBootServletInitializer : 

/** 
* War部署 
* 
* @author SanLi 
* Created by 2689170096@qq.com on 2018/4/15 
*/ 
public class ServletInitializer extends SpringBootServletInitializer { 
 
  @Override 
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
      return application.sources(Application.class); 
  } 
 
  @Override 
  public void onStartup(ServletContext servletContext) throws ServletException { 
      super.onStartup(servletContext); 
      servletContext.addListener(new HttpSessionEventPublisher()); 
  } 
} 

這里外部 servlet 容器查找在war包下的 META-INF 文件夾下MANIFEST.MF文件中定義的 Main-class , SpringBootServletInitializer 將負責綁定 Servlet , Filter 和 ServletContextInitializer 。

6、打包和部署

最后,讓我們看看如何打包和部署應用程序。這兩個框架都支持 Maven 和 Gradle 等通用包管理技術。但是在部署方面,這些框架差異很大。例如,Spring Boot Maven插件在 Maven 中提供Spring Boot 支持。它還允許打​​包可執(zhí)行 jar 或 war 包并 就地 運行應用程序。

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

  • 提供嵌入式容器支持
  • 使用命令 java -jar 獨立運行jar
  • 在外部容器中部署時,可以選擇排除依賴關系以避免潛在的jar沖突
  • 部署時靈活指定配置文件的選項
  • 用于集成測試的隨機端口生成

7、結論

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

到此這篇關于Spring和SpringBoot比較及區(qū)別解惑的文章就介紹到這了,更多相關Spring和SpringBoot區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論