第3章Spring Boot入门
学习目的与要求
本章首先介绍什么是Spring Boot,然后介绍Spring Boot应用的开发环境,最后介绍如何快速构建一个Spring Boot应用。通过本章的学习,掌握如何构建Spring Boot应用的开发环境以及Spring Boot应用。
本章主要内容
 Spring Boot概述。
 Spring Boot应用的开发环境。
 Maven构建Spring Boot应用。
 快速构建Spring Boot应用。
从前两章的学习可知,Spring框架非常优秀,但问题在于“配置过多”,造成开发效率低、部署流程复杂以及集成难度大等问题。为解决上述问题,Spring Boot应运而生。作者在编写本书时,Spring Boot的最新正式版是2.1.4.RELEASE,Spring Boot 2.2.0M1里程碑版本已经发布。为了提高程序的稳定性,本书将以Spring Boot 2.1.4.RELEASE版
本编写示例代码。读者测试本书示例代码时,建议使用2.1.4.RELEASE或更高版本。
视频讲解
3.1Spring Boot概述
3.1.1什么是Spring Boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用

的初始搭建以及开发过程。使用Spring Boot框架可以做到专注于Spring应用的开发,无须过多关注样板化的配置。
在Spring Boot框架中,使用“约定优于配置(Convention Over Configuration,COC)”的理念。针对企业应用开发,提供了符合各种场景的springbootstarter自动配置依赖模块,这些模块都是基于“开箱即用”的原则,进而使企业应用开发更加快捷和高效。可以说,Spring Boot是开发者和Spring框架的中间层,目的是帮助开发者管理应用的配置,提供应用开发中常见配置的默认处理(即约定优于配置),简化Spring应用的开发和运维,降低开发人员对框架的关注度,使开发人员把更多精力放在业务逻辑代码上。通过“约定优于配置”的原则,Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者。
3.1.2Spring Boot的优点
Spring Boot之所以能够应运而生,是因为它具有以下优点: 
(1) 使编码变得简单: 推荐使用注解。
(2) 使配置变得快捷: 具有自动配置、快速构建项目、快速集成第三方技术的能力。
(3) 使部署变得简便: 内嵌Tomcat、Jetty等Web容器。
(4) 使监控变得容易: 自带项目监控。
3.1.3Spring Boot的主要特性
1. 约定优于配置

Spring Boot遵循“约定优于配置”的原则,只需很少的配置,大多数情况直接使用默认配置即可。
2.  独立运行的Spring应用
Spring Boot可以以jar包的形式独立运行。使用java jar命令或者在项目的主程序中执行main方法运行Spring Boot应用(项目)。
3.  内嵌Web容器
内嵌Servlet容器,Spring Boot可以选择内嵌Tomcat、Jetty等Web容器,无须以war包形式部署应用。
4.  提供starter简化Maven配置
Spring Boot提供了一系列的starter pom简化Maven的依赖加载,基本上可以做到自动化配置,高度封装,开箱即用。
5.  自动配置Spring
Spring Boot根据项目依赖(在类路径中的jar包、类)自动配置Spring框架,极大地减少了项目的配置。
6. 提供准生产的应用监控
Spring Boot提供基于HTTP、SSH、TELNET对运行的项目进行跟踪监控。
7. 无代码生成和XML配置
Spring Boot不是借助于代码生成来实现的,而是通过条件注解来实现的。提倡使用Java配置和注解配置相结合的配置方式,方便快捷。视频讲解
3.2第一个Spring Boot应用
3.2.1Maven简介


Apache Maven是一个软件项目管理工具。基于项目对象模型(Project Object Model,POM)的理念,通过一段核心描述信息来管理项目构建、报告和文档信息。在Java项目中,Maven主要完成两件工作: ①统一开发规范与工具; ②统一管理jar包。
Maven统一管理项目开发所需要的jar包,但这些jar包将不再包含在项目内(即不在lib目录下),而是存放于仓库中。仓库主要包括以下内容。
1. 中央仓库
中央仓库存放开发过程中的所有jar包,例如JUnit,这些jar包都可以通过互联网从中央仓库下载,仓库地址: http://mvnrepository.com。
2. 本地仓库
本地仓库即本地计算机中的仓库。官方下载Maven的本地仓库,配置在“%MAVEN_HOME%\conf\settings.xml”文件中,找到localRepository即可; Eclipse中自带Maven的默认本地仓库地址在“{user.home}/.m2/repository/settings.xml”文件中,同样找到localRepository即可。
Maven项目首先会从本地仓库中获取所需要的jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)下载jar包,并放入本地仓库以备将来使用。
3.2.2Maven的pom.xml
Maven是基于项目对象模型的理念管理项目的,所以Maven的项目都有一个pom.xml配置文件来管理项目的依赖以及项目的编译等功能。
在Maven Web项目中,重点关注以下元素。
1. properties元素
在<properties></properties>之间可以定义变量,以便在<dependency></dependency>中引用,代码如下: 

<properties>

<!-- spring版本号 -->

<spring.version>5.1.5.RELEASE</spring.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>${spring.version}</version>

</dependency>

</dependencies>

2. dependencies元素
<dependencies></dependencies>,此元素包含多个项目依赖需要使用的<dependency></dependency>元素。
3. dependency元素
<dependency></dependency>元素内部通过<groupId></groupId>、<artifactId> </artifactId>、<version></version>3个子元素确定唯一的依赖,也可以称为3个坐标。代码如下: 

<dependency>

<!--groupId组织的唯一标识-->

<groupId>org.springframework</groupId>

<!--artifactId项目的唯一标识-->

<artifactId>spring-core</artifactId>

<!--version 项目的版本号 -->

<version>${spring.version}</version>

</dependency>

3.2.3在Eclipse中创建Maven Web项目
本节在基于Eclipse平台的Java Web应用开发环境(见1.2节)的基础上,创建Maven Web项目。
1. 新建Maven Web项目
在Eclipse中新建Maven Web项目,具体实现步骤如下: 
(1) 选择菜单File|New|Maven Project,打开如图3.1所示的Select project name and location对话框。


图3.1Select project name and location


(2) 单击图3.1中的Next按钮,打开如图3.2所示的Select an Archetype对话框,在该对话框中,选择Archetype为 webapp。


图3.2Select an Archetype



(3) 单击图3.2中的Next按钮,打开如图3.3所示的Specify Archetype parameters对话框,在该对话框中,输入一些必要信息,单击Finish按钮。


图3.3Enter a group id for the artifact


(4) 创建的Maven Web项目ch3_1的目录结构如图3.4所示。


图3.4项目ch3_1的目录结构


2. 配置Maven Web项目
新建的Maven Web项目,需要修改一些配置,具体步骤如下: 
(1) 右击项目ch3_1,选择Build Path|Configure Build Path,打开如图3.5所示的Properties for ch3_1对话框。


图3.5Properties for ch3_1


(2) 在图3.5中,选择 Libraries 标签,选中JRE System Library,单击Edit按钮,打开如图3.6所示的Select JRE for the project build path对话框。


图3.6Select JRE for the project build path


(3) 在图3.6中,选择Workspace默认的JRE,单击Finish 按钮,最后,单击Apply and Close即可。完成后,项目结构如图3.7所示。
图3.7中src/main/java目录包含项目的Java源代码; src/main/resources目录包含项目所需的资源(如配置文件); src/test/java目录包含用于测试的Java代码; src/main/webapp目录包含Java Web应用程序; 目录由Maven创建。target包含所有编译的类、JAR文件等。当执行 mvn clean 命令时,Maven将清除此目录。
(4) 右击项目名ch3_1,选择Run As|Run on Server,运行ch3_1项目,运行结果如图3.8所示。



图3.7项目结构图




图3.8运行ch3_1项目



3.2.4Maven手工构建第一个Spring Boot应用
本节在3.2.3节Maven Web项目ch3_1的基础上,手工构建一个Spring Boot应用,具体实现步骤如下。
1. 配置Spring Boot的核心启动器
构建基于Spring Boot的应用。首先,在pom.xml文件的<url…/>元素之后添加<parent…/>元素配置Spring Boot的核心启动器springbootstarterparent,代码如下: 

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.4.RELEASE</version>

</parent>

2. 添加starter模块
然后,在pom.xml文件的<dependencies…/>元素中增加一个<dependency…/>元素添加需要的starter模块,此处只添加了springbootstarterweb模块。Spring Boot包含了很多starter模块(见4.1.6节),每一个starter模块就是一系列的依赖组合。如springbootstarterweb模块包含Spring Boot预定义的Web开发的常用依赖包(包括Tomcat和springwebmvc)。由于指定了springbootstarterparent的版本,所以此处的springbootstarterweb模块不需要指定版本,Spring Boot将自动选择匹配的版本进行加载。代码如下: 

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

Web项目ch3_1的pom.xml文件修改后的内容如下: 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.maven.demo</groupId>

<artifactId>ch3_1</artifactId>

<packaging>war</packaging>

<version>0.0.1-SNAPSHOT</version>

<name>ch3_1 Maven Webapp</name>

<url>http://maven.apache.org</url>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.4.RELEASE</version>

</parent>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<scope>test</scope>

</dependency>

</dependencies>

<build>

<finalName>ch3_1</finalName>

</build>

</project>

pom.xml文件修改保存后,Maven将自动在互联网环境下,下载所需的所有jar文件。
3. 编写测试代码
在src/main/java目录下,创建com.test包,并在该包中创建TestController类,具体代码如下: 

package com.test;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class TestController {

@RequestMapping("/hello")

public String hello() {

return "您好,Spring Boot!";

}

}

上述代码中使用的@RestController注解是一个组合注解,相当于Spring MVC中的@Controller和@ResponseBody注解的组合,具体应用如下: 
(1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回JSP或者html页面,返回的内容就是return的内容。
(2) 如果需要返回指定页面,则需要用@Controller注解。如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
4. 创建应用程序的App类(启动类)
在com.test包中创建Ch3_1Application类,具体代码如下: 

package com.test;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class Ch3_1Application {

public static void main(String[] args) {

SpringApplication.run(Ch3_1Application.class, args);

}

}

上述代码中使用@SpringBootApplication注解指定该程序是一个Spring Boot应用,该注解也是一个组合注解,相当于@Configuration、@EnableAutoConfiguration和@ComponentScan注解的组合,具体细节在第4章讲解。SpringApplication类调用run方法启动Spring Boot应用。
5. 运行main方法启动Spring Boot应用
运行Ch3_1Application类的main方法后,控制台信息如图3.9所示。


图3.9启动Spring Boot应用后的控制台信息


从上面的控制台信息可以看到Tomcat的启动过程、Spring MVC的加载过程。注意Spring Boot内嵌Tomcat容器,因此Spring Boot应用不需要开发者配置与启动Tomcat。
6. 测试Spring Boot应用
启动Spring Boot应用后,默认访问地址为http://localhost:8080/,将项目路径直接设为根路径,这是Spring Boot的默认设置。


图3.10访问Spring Boot应用

因此,可以通过http://localhost:8080/hello测试应用(hello与测试类TestController中的@RequestMapping("/hello")对应),测试效果如图3.10所示。视频讲解

3.3Spring Boot快速构建
在3.2.4节使用Maven方便快捷地手工构建了一个Spring Boot应用,
但还可以使用更便捷的方法构建Spring Boot应用。本节将讲解两个方便快捷的构建方法: http://start.spring.io和Spring Tool Suite(STS)。
3.3.1http://start.spring.io
使用http://start.spring.io快速构建Spring Boot应用的具体步骤如下。
1. 打开spring.io
在浏览器地址栏中输入“http://start.spring.io”,打开如图3.11所示的界面。


图3.11打开spring.io


2. 填写项目信息
在图3.11中,Project默认选择Maven Project,Language默认选择Java,Spring Boot默认选择最新正式版。Project Metadata的Group输入“com.test”,Artifact输入“ch3_2”,单击More options按钮,Java Version选择11。Project Metadata的信息如图3.12所示。


图3.12Project Metadata


在Dependencies处,输入“web”进行搜索,如图3.13所示。


图3.13Search dependencies to add


单击图3.13中的“+”号添加Web依赖。
3. 创建应用并下载源代码
在图3.11中单击Generate Project按钮,创建Spring Boot应用,并下载源代码。此处下载的源代码是一个简单的基于Maven的应用,解压后的目录如图3.14所示。


图3.14项目目录


4. 导入Maven项目到集成开发工具中
可将ch3_2这个Maven项目导入读者常用的集成开发工具中,如Eclipse。Eclipse导入Maven项目过程如图3.15所示。


图3.15Eclipse导入Maven项目过程





图3.15(续)




图3.16ch3_2项目结构

成功导入ch3_2这个Maven项目后,在Eclipse中显示如图3.16所示的项目结构。
这时,就可以在ch3_2项目中编写自己的Spring Boot应用程序了,如Web应用程序。
3.3.2Spring Tool Suite
Spring Tool Suite(STS)是一个定制版的Eclipse,专为Spring开发定制,方便创建、调试、运行、维护Spring应用。通过该工具,可以很轻易地生成一个Spring工程,例如Web工程,最令人兴奋的是工程中的配置文件都将自动生成,开发者再也不用关注配置文件的格式及各种配置了。可通过官网https://spring.io/tools下载Spring Tools for Eclipse,本书采用的版本是springtoolsuite44.1.1.RELEASEe4.10.0win32.win32.x86_64.zip。该版本与Eclipse一样,免安装,解压即可使用。
下面详细讲解如何使用STS集成开发工具快速构建一个Spring Boot应用,具体实现步骤如下。
1. 新建Spring Starter Project
选择菜单File|New|Spring Starter Project,打开如图3.17所示的New Spring Starter Project对话框。


图3.17New Spring Starter Project

2. 选择项目依赖
在图3.17中输入项目信息后,单击Next按钮,打开如图3.18所示的New Spring Starter Project Dependencies对话框,并在图中选择项目依赖,如Web。


图3.18New Spring Starter Project Dependencies


单击图3.18中的Finish按钮,即可完成Web应用的创建。ch3_3的项目结构如图3.19所示。此时,就可以在项目ch3_3中编写自己的Web应用程序了。


图3.19ch3_3的项目结构


STS是一款专为Spring定制的Eclipse,并可以快速构建Spring Boot应用。因此,本书后续章节都采用STS IDE编写示例代码。
3.4本章小结
本章首先简单介绍了Spring Boot应运而生的缘由,然后讲述了如何使用Maven手工构建一个Spring Boot应用,最后演示了如何使用 http://start.spring.io或Spring Tool Suite(STS)快速构建Spring Boot应用。开发者如何构建Spring Boot应用,可根据实际工程需要选择合适的IDE。
习题3
1. Spring、Spring MVC、Spring Boot三者有什么联系?为什么还要学习Spring Boot?
2. 在Eclipse中如何使用Maven手工构建Spring Boot的一个Web应用?