本文翻译自 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