Spring-Boot-Introduction-1

Spring Boot 入门(一)


Spring Boot是什么

Spring Boot让你很轻松的创建独立的、基于Spring的应用,Spring官方将Spring平台和第三方库做到了开箱就用,大多数Spring Boot 应用只需要很少的配置就可以使用。

Spring Boot 运行环境

Spring Boot 2.1.4.RELEASE兼容java8到java11之间的java版本,还需要5.1.6.RELEASE以上的Spring Framework版本。

还为一下build工具提供支持

BuildTool Version
Maven 3.3+
Gradle 4.4+

Spring Boot还支持以下嵌入式servlet容器

Name Servlet Version
Tomcat 9.0 4.0
Jetty 9.4 3.1
Undertow 2.0 4.0

你也可以将Spring Boot 应用部署到任意兼容Sevlet3.1以上容器

Spring Boot安装

在安装之前先确认资质的Java SDK版本在1.8以上,然后可以将spring-boot-*.jar文件放在 classpath 目录下,Spring Boot 不需要任何工具的集成,可以直接通过IDE或文本编辑器使用。Spring Boot 应用和其它应用一样运行和debug。

尽管你可以直接将文件复制到目录下使用,还是建议你使用build tool(例如Maven或Gradle)来进行管理。

在Maven中使用

Spring Boot 兼容 Apache Maven 3.3或以上版本,你可以在Maven的POM配置文件中添加dependency例如:

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>

其他Spring工具也可以在https://mvnrepository.com/中找到添加方法

Spring Boot还提供了一个可选的Maven插件来创建可执行jar

1
2
3
4
5
6
7
8
9
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

在Gradle中使用

和Maven类似,我没用过

安装Spring Boot CLI

Spring Boot CTL (Command Line Interface) 是一个可以让你使用Spring快速原型的命令行工具。他会让你运行Grrovy脚本,这是你可以使用Java语法而且没有太多的样板代码。你不需要通过CTL来使用Spring Boot, 不过它是创建Spring应用的最快方法,你可以使用它来体验Spring。

想要下载的到官网下载:https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started-installing-spring-boot.html

Spring Boot CLI的hello world:

1
2
3
4
5
6
7
8
9
@RestController
class ThisWillActuallyRun {

@RequestMapping("/")
String home() {
"Hello World!"
}

}

升级Spring Boot

当你从早期版本升级到最新的版本时,有些属性可能已经被移除或者重命名,Spring Boot 提供了一个在运行时诊断版本问题的工具,你可以在dependency中添加使用:

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>

写第一个Spring Boot 应用

检查配置环境

先配置好Java和Maven,在终端使用下面的命令检查

1
2
3
java -version
javac -version
mvn -version

如果显示not found 就安装Java和Maven并配置环境变量,Java在官网下载对应的JDK后安装并在环境变量中配置,Maven就只要解压到自己想要的目录并添加到Path就行。

Windows:

Linux:

在/etc/profile/中添加以下内容

1
2
3
4
5
6
export  JAVA_HOME=/usr/java/jdk1.8.0_202
export JRE_HOME=/usr/java/jdk1.8.0_202/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
export MAVEN_HOME=/home/ogic/Programs/maven/apache-maven-3.6.0
export PATH=$MAVEN_HOME/bin:$PATH

创建pom.xml

你当然可以通过vim、vscode等文本编辑器来创建这个文件,并使用 mvn package 来测试他是否生效,不过海山建议你使用Eclipse或Idea等IDE来创建,省去一些惯例的开头。下面使用Eclipse来举例:

选择模板,这里使用quickstart

然后定下组名和工程名

进去后找到pom.xml可以看到大体格式已经被IDE做好了

但是还没有引入Spring Boot,我们可以右键项目或pom.xml文件,选择maven->Add Dependency,然后就可以到pom.xml文件中发现已经添加了dependency了,自行创建pom.xml的也可以拷贝以下代码。注意在eclipse中直接在代码里加如dependency的话可能会没有生效(在idea里可以直接加)*,建议使用右键添加。在添加后Maven会联网获得相关工具(其实前面创建的时候也要)*,注意网络环境,如果出现下载错误的情况,可以在删除.m2目录下的repository里的所有文件,然后右键项目->Maven->update project, 如果发现.m2下没有settings.xml这个文件,就到eclipse目录下的plugins目录里找一找maven,没有的话就上网下一个,或者你有idea的话到idea里的plugins里找,找到后拷贝到.m2

还有一个重要的点,在添加dependency的时候,请记得填版本号,虽然是选填,但是你不填IDE不知道下哪一个版本,就会报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>SpringBoot</groupId>
<artifactId>HelloSpringBoot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

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

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
</dependencies>
</project>

添加方式:

注意上面的dependency中还有一个spring-boot-starter-web,添加方式类似。

之后就类似java项目那样做一个main class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package SpringBoot.HelloSpringBoot;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class App
{
@RequestMapping("/")
String home() {
return "Hello Spring Boot!";
}
public static void main( String[] args )
{
SpringApplication.run(App.class, args);
}
}

运行后浏览器输入localhost:8080就可以看到效果了

代码解释

Java部分的代码就不讲了,这里主要解释一下那几条注释(annotation)

@RestController

@RestController是一个构造注释,既能告诉阅读代码的人这个类是什么,也能告诉Spring这个类很特别,这里主要是告诉Spring这个类是web@Controller,那样当Spring在处理web请求的时候就会考虑它。

@EnableAutoConfiguration

允许Spring Boot自动配置,根据你添加的 jar dependencies 去自动配置,上面的 spring-boot-starter-web添加了Tomcat和Spring MVC,所以Spring 推测你是要开发web应用,并做相应的配置。

@RequestMapping(“/“)

这里主要是提供一个路由信息,告诉Spring所有路径中带/的请求要映射到home方法上,然后@RestController让Spring直接返回字符串的渲染。它和@RestController也是Spring MVC上的注释,不只是Spring Boot上有。

启动配置原理

  1. 创建SpringApplication对象
    1. 保存主配置类
    2. 判断当前是否一个web应用
    3. 从类路径下找到META-INF/spring.factories配置的所有ApplicationContextInitializer,然后保存起来
    4. 从类路径下找到META-INF/spring.factories配置的所有ApplicationListener,然后保存起来
    5. 从多个配置类中找到有main方法的主配置类
  2. 运行run方法
    1. 从类路径下META-INF/spring.factories获取SpringApplicationRunListeners
    2. 回调所有的获取SpringApplicationRunListener.starting()方法
    3. 封装命令行参数
    4. 创建环境完成后回调SpringApplicationRunListener.environmentPrepared(),表示环境准备完成
    5. 创建ApplicationContext:决定创建web的IOC还是普通的IOC
    6. 准备上下文环境,将environment保存到IOC中,而且回调之前保存的所有的ApplicationContextInitializerinitialize方法和SpringApplicationRunListenercontextPrepared()方法
    7. prepareContext运行完成以后回调所有的SpringApplicationRunListenercontextLoaded()
    8. 刷新容器,IOC容器初始化(如果是web应用还会创建嵌入式的Tomcat)
    9. 扫描,创建,加载所有组件的地方(配置类,组件,自动配置):Spring注解
    10. 从IOC容器中获取所有的ApplicationRunner回调,随后再回调CommandLineRunner
    11. 所有的SpringApplicationRunListener回调finished方法
    12. 整个SpringBoot应用启动完成以后返回启动的IOC容器;