本文翻譯自 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 跟 Spring、Spring MVC 作一個比較,來幫助理解 Spring Boot 到底帶來了什麼。一旦明白了 Spring Boot 能提供什麼功能,也就能更好的使用 Spring Boot。編程
它們之間的關係,最重要的一點是:bootstrap
Spring Boot 跟 Spring、Spring MVC 不是競爭關係,Spring Boot 是爲了能更好的使用他們。api
Spring 框架最重要的特性就是依賴注入(Dependency Injection),而全部 Spring 模塊的核心就是依賴注入和控制反轉(IOC - Inversion of Control)。spring-mvc
經過妥善的使用依賴注入和控制反轉,咱們能夠較爲容易地開發出鬆散耦合的應用,而且易於測試。緩存
Spring MVC 提供了諸如 Dispatcher Servlet、ModelAndView 和 View Resolver 等,讓編寫鬆散耦合的 Web 應用變得很容易。tomcat
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 和 Spring MVC 有很是多的 XMl 和 Java Bean 配置。 而 Spring Boot 經過一個新思路爲咱們解決了這個問題:
咱們能不能讓配置變得更智能?當應用裏面增長了 Spring MVC 的 JAR 包,咱們能不能自動地配置一些 Java Bean?
Spring Boot 自動配置的規則:
Spring Boot 首先會檢查這兩部分:一是 classpath 裏面存在的框架;二是應用已經存在的配置。結合這兩部分,Spring Boot 就能夠提供這些框架所需的基本配置,這就是 Spring Boot 的自動配置。
關於自動配置的深層講解,請閱讀:What is Spring Boot Auto Configuration?
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,咱們能夠很容易的引入並使用它們:
幾乎全部的 Web 應用都須要這些模塊,Spring Boot Starter Web 已經打包好了這些依賴。而開發者就不須要去處理這些依賴,以及它們的版本兼容問題。
Spring Boot 提供了大量這類 starter 項目。而 Spring Initializr 也全都支持,其中就包括:
想更深刻的瞭解 starter 項目,請閱讀:Initializing Projects with Spring Boot Starters - Web and JPA
幾乎全部 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 讓咱們更好的管理多個子項目或者模塊:
想更深刻的瞭解 Spring Boot Starter Parent,請閱讀:Introduction to Spring Boot Starter Parent
Spring Initializr 是一個很是好的初始化 Spring Boot 項目的工具。
它提供了一個很簡單的 UI,經過它咱們能夠建立各類不一樣類型的 Spring 項目,如:
咱們來體驗一下怎麼經過 Spring Initializr 來建立一個項目:
如上圖所示,只需簡單幾步:
com.in28minutes.springboot
student-services
Web
Generate Project
按鈕intelliJ
或者 Eclipse
便可。想更深刻的瞭解 Spring Initializr,請閱讀:Spring Initializr - Bootstrap Your Spring Boot Applications at F1 speed!
當咱們建立了一個可部署的包以後,咱們能夠在部署包中嵌入一個服務器(如 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 的依賴:
想更深刻的瞭解內嵌服務器,請閱讀:Spring Boot and Embedded Servers - Tomcat, Jetty, and Undertow
官方說明 projects.spring.io/spring-data…:
Spring Data 提供了一個簡單、統一,且基於 Spring 編程模型的數據接入層,同時還能保留了底層數據存儲的一些特性。它讓咱們使用數據接入技術、關係型數據庫、非關係型數據庫、map-reduce 框架以及基於雲的服務變得簡單。
簡單來講,Spring Data 提供了一個統一的抽象,咱們能夠無論底層多樣的數據源,而使用一個統一的接入層。
Spring Data 包括了以下子模塊:
想更深刻的瞭解 Spring Data,請閱讀:Introduction to Spring Data - Spring Data JPA, Spring Data REST, and MongoDB