初學 Spring Boot,你須要瞭解的 7 樣東西

本文翻譯自 7 Things to Know Getting Started With Spring Boot by Ranga Karanamweb

Spring Boot 是一個比較 tricky 的框架,因此也每每不容易理解。這篇教程將講解 Spring Boot 的基本組成,包括 Starter 項目、自動配置和 Starter Parents 等,來幫助初學者能更好的理解和掌握 Spring Boot。spring

理解 Spring Boot 的架構

Spring Boot 包含了這些組成部分:數據庫

  1. Spring Boot Starter 項目
  2. Spring Boot Starter Parent
  3. 自動配置

首先咱們會先把 Spring Boot 跟 Spring、Spring MVC 作一個比較,來幫助理解 Spring Boot 到底帶來了什麼。一旦明白了 Spring Boot 能提供什麼功能,也就能更好的使用 Spring Boot。編程

Spring Boot vs Spring MVC vs Spring

它們之間的關係,最重要的一點是:bootstrap

Spring Boot 跟 Spring、Spring MVC 不是競爭關係,Spring Boot 是爲了能更好的使用他們。api

Spring 框架

Spring 框架最重要的特性就是依賴注入(Dependency Injection),而全部 Spring 模塊的核心就是依賴注入和控制反轉(IOC - Inversion of Control)。spring-mvc

經過妥善的使用依賴注入和控制反轉,咱們能夠較爲容易地開發出鬆散耦合的應用,而且易於測試。緩存

Spring MVC

Spring MVC 提供了諸如 Dispatcher Servlet、ModelAndView 和 View Resolver 等,讓編寫鬆散耦合的 Web 應用變得很容易。tomcat

Spring Boot

Spring、Spring MVC 的一個弊端就是配置很複雜:springboot

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/views/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
複製代碼

而 Spring Boot 經過自動配置Starter Project 解決了這個問題。同時它也提供了不少特性,讓構建 production-ready 的應用變得容易和迅速。

關於 Spring Boot 和 Spring、Spring MVC 更深層次的對比,請閱讀:Spring Boot vs. Spring MVC vs. Spring - How do they compare?

Spring Boot 自動配置

Spring 和 Spring MVC 有很是多的 XMl 和 Java Bean 配置。 而 Spring Boot 經過一個新思路爲咱們解決了這個問題:

咱們能不能讓配置變得更智能?當應用裏面增長了 Spring MVC 的 JAR 包,咱們能不能自動地配置一些 Java Bean?

  • 若是 classpath 裏面有 Hibernate 的 JAR 包,Data Source 就自動配置好了,怎麼樣?
  • 若是 classpath 裏面有 Spring MAC 的 JAR 包,Dispatcher Servlet 就自動配置好了,怎麼樣?

Spring Boot 自動配置的規則:

Spring Boot 首先會檢查這兩部分:一是 classpath 裏面存在的框架;二是應用已經存在的配置。結合這兩部分,Spring Boot 就能夠提供這些框架所需的基本配置,這就是 Spring Boot 的自動配置。

關於自動配置的深層講解,請閱讀:What is Spring Boot Auto Configuration?

Spring Boot Starter 項目

Spring Boot 文檔裏是這樣描述 Starter 項目的:

Starter 項目是一系列方便的依賴描述,能夠在咱們的項目中引用。經過 starter 項目,咱們能「一站式」得得到全部所需的 Spring 以及相關技術,而不用像之前同樣去找各類事例代碼,複製相關的依賴描述。例如:若是咱們想使用 Spring 和 JPA 來連接數據庫,咱們只須要把 spring-boot-starter-data-jpa 引入到咱們的項目中,項目就搭建完了。

下面經過 Spring Boot Starter Web 來舉個例子:

若是咱們想開發一個 Web 應用或者 RESTful 服務,咱們就能夠直接使用 Spring Boot Starter Web。

當把 Spring Boot Starter Web 加到咱們的項目依賴中,咱們就能夠看到相關的不少其餘依賴也被加到應用裏面了,如截圖:

這裏麪包含了不少開發一個 Web 應用所需的經常使用模塊。經過 Spring Boot Starter Web,咱們能夠很容易的引入並使用它們:

  • Spring - core,beans,context,AOP
  • Web MVC - Spring MVC
  • Jackson - JSON 解析庫
  • Validation - Hibernate Validator,Validation API
  • Embedded Servlet Container - Tomcat
  • Logging - logback,slf4j

幾乎全部的 Web 應用都須要這些模塊,Spring Boot Starter Web 已經打包好了這些依賴。而開發者就不須要去處理這些依賴,以及它們的版本兼容問題。

Spring Boot 提供了大量這類 starter 項目。而 Spring Initializr 也全都支持,其中就包括:

  • spring-boot-starter-web-services:構建 SOAP Web 服務應用
  • spring-boot-starter-web:構建 Web 應用和 RESTful 服務
  • spring-boot-starter-test:編寫單元測試和集成測試
  • spring-boot-starter-jdbc:傳統的 JDBC 應用
  • spring-boot-starter-hateoas:給應用增長 HATEOAS 特性讓服務更 RESTful 化
  • spring-boot-starter-security:使用 Spring Security 來進行認證和受權
  • spring-boot-starter-data-jpa:Spring Data JPA 和 Hibernate
  • spring-boot-starter-cache:讓 Spring 框架支持緩存
  • spring-boot-starter-data-rest:使用 Spring Data REST 來暴露一個簡單的 REST 服務

想更深刻的瞭解 starter 項目,請閱讀:Initializing Projects with Spring Boot Starters - Web and JPA

Spring Boot Starter Parent

幾乎全部 Spring Boot 項目的 pom.xml 配置中,都使用了 spring-boot-starter-parent 來做爲 parent 配置:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>
複製代碼

parent POMs 讓咱們更好的管理多個子項目或者模塊:

  • 配置相關:Java 版本和其餘屬性
  • 依賴管理:依賴的版本
  • 默認插件的配置

想更深刻的瞭解 Spring Boot Starter Parent,請閱讀:Introduction to Spring Boot Starter Parent

Spring Initializr:讓建立 Spring Boot 項目像開 F1 賽車同樣快

Spring Initializr 是一個很是好的初始化 Spring Boot 項目的工具。

它提供了一個很簡單的 UI,經過它咱們能夠建立各類不一樣類型的 Spring 項目,如:

  • Web 應用
  • RESTful 服務
  • Batch 應用

咱們來體驗一下怎麼經過 Spring Initializr 來建立一個項目:

如上圖所示,只需簡單幾步:

  • 打開 Spring Initializr (start.spring.io/)
    • Group 輸入 com.in28minutes.springboot
    • Artifact 輸入 student-services
    • dependency 選擇 Web
  • 點擊頁面下方的 Generate Project 按鈕
  • 把項目導入到 intelliJ 或者 Eclipse 便可。

想更深刻的瞭解 Spring Initializr,請閱讀:Spring Initializr - Bootstrap Your Spring Boot Applications at F1 speed!

Spring Boot 和內嵌服務器

當咱們建立了一個可部署的包以後,咱們能夠在部署包中嵌入一個服務器(如 Tomcat)。

例如,對於一個 Spring Boot 應用,咱們能夠構建一個 JAR 包,裏面包含了一個內嵌的 Tomcat 服務器(Embedded Tomcat),而後咱們就能夠像執行一個普通的 Java 程序同樣啓動這個服務器。

一個內嵌的服務器意味着,在咱們的部署包裏面包含了服務器的二進制文件(如 tomcat.jar)

咱們來看下 spring-boot-starter-web 的依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <version>2.0.0.M6</version>
    <scope>compile</scope>
</dependency>
複製代碼

能夠看到,默認狀況下,Starter Web 已經包含了 Starter Tomcat 的依賴:

  • Tomcat 是 Spring Boot 的默認內嵌服務器
  • Spring Boot 也支持 Jetty 和 Undertow

想更深刻的瞭解內嵌服務器,請閱讀:Spring Boot and Embedded Servers - Tomcat, Jetty, and Undertow

Spring Data

官方說明 projects.spring.io/spring-data…

Spring Data 提供了一個簡單、統一,且基於 Spring 編程模型的數據接入層,同時還能保留了底層數據存儲的一些特性。它讓咱們使用數據接入技術、關係型數據庫、非關係型數據庫、map-reduce 框架以及基於雲的服務變得簡單。

簡單來講,Spring Data 提供了一個統一的抽象,咱們能夠無論底層多樣的數據源,而使用一個統一的接入層。

Spring Data 包括了以下子模塊:

  • Spring Data JPA - 關係型數據庫
  • Spring Data MongoDB
  • Spring Data REST - 封裝 Spring Data 倉庫,提供一個優秀的 REST api 服務

想更深刻的瞭解 Spring Data,請閱讀:Introduction to Spring Data - Spring Data JPA, Spring Data REST, and MongoDB

其餘引用

相關文章
相關標籤/搜索