文章目录
1.概述
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
可以简单理解为,springboot是为了解决Spring 的配置烦琐、臃肿,并且在和各种第三方框架进行整合时代码量非常大,整合的代码重复的特别多的问题。
springboot可以让开发者快速上手,带来了全新的自动化配置解决方案,使用 Spring Boot 可以快速创建基于 Spring 生 产级的独立应用程序 。 Spring Boot 中对一些常用的第三方库提供了默认的 自动化配置方案,使得 开发者只需要很少的 Spring 配置就能运行一个完整的 Java EE 应用。 Spring Boot 项目可以采用传 统的方案打成 war 包,然后部署到 Tomcat 中运行。也可以直接打成可执行 jar 包,这样通过java -jar 命令就可以启动一个 Spring Boot 项目 。
根据其官方文档描述,其主要目的为:
- 为所有的Spring开发提供一个根本性的更快、更广泛的入门体验。
- 开箱即用,但随着需求开始偏离默认值,请迅速摆脱困境。
- 提供一系列大类项目常见的非功能特性(如嵌入式服务器、安全、度量、健康检查和外部化配置)。
- 绝对没有代码生成,也不要求XML配置。
最新的springboot 3.0.2-SNAPSHOT 需要 Java 17 ,并且可以兼容到Java 19,包括Java 19。还需要Spring Framework 6.0.3 或以上版本。
并且其支持tomcat,jetty,undertow嵌入式Servlet容器,而且对maven,gradle构建工具提供了明确的支持。
所以,使用Spring Boot框架,有以下的好处:
- 帮助我们创建独立的Spring应用程序,简化了创建Spring应用程序的操作
- 内置嵌入的Tomcat,无需我们自己手动部署WAR文件
- 简化了Maven配置,省去了我们繁琐的操作
- 自动配置Spring,不用手动对Spring项目进行配置文件的设置
- 提供生产就绪型功能,如指标,健康检查和外部配置,并提供单元测试功能
2.使用SpringBoot
2.1 创建SpringBoot项目
springboot一般有俩种安装方式,一种是使用CLI(命令行工具)进行springboot项目构建,另一种是大多数情况下使用开发工具自动进行构建。
2.1.1 通过Spring Boot CLI构建
Spring Boot CLI(命令行界面)是一个命令行工具,我们可以用它来快速的建立Spring的原型。并且其允许运行Groovy 脚本,这意味着你有一个熟悉的类似Java的语法,而没有那么多的模板代码。
在没有IDE的情况下,我们才会考虑使用CLI来使用SpringBoot,它可以帮助我们快速构建一个新的springboot应用程序,当然其快速只是相对来说的,更多情况下,我们还是使用IDE来构建,使用IDE构建更加方便和快捷。
我们可以从Spring软件仓库下载Spring CLI发行版:
下载后,按照解压后的档案中的 INSTALL.txt 说明操作。在.zip文件的 bin/ 目录下有一个 spring 脚本(Windows的是 spring.bat )。或者,你可以使用 java -jar 来执行 .jar 文件(脚本可以帮助你确定classpath是否设置正确)。
安装完成后,我们可以通过构建程序来测试是否已正确安装完成,首先,创建一个名为 app.groovy的文件,如下所示:
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
然后从shell运行它,如下所示:
$ spring run app.groovy
第一次运行因为要加载相关依赖的原因,所以会比较慢,需要耐心等待,成功运行后,在浏览器中打开 localhost:8080。 你应该看到以下输出。
Hello World!
2.1.2 通过IDEA构建
我们首先在IDEA中创建一个springboot项目,点击左上角的File–>Project后,根据下图设置相关内容:
点击NEXT后,在下个页面我们勾选Spring Web,勾选后创建项目会自动为我们下载web相关需要的依赖:
点击Create后并会正式创建我们的springboot项目,将进入项目页面,并会自动开始为我们下载相关依赖。
2.2 初始pom.xml文件详解
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--提供相关的Maven默认依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.11</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>springboot</description>
<!--使用jdk8的版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
上面是新创建SpringBoot项目后,初始的pom.xml文件,下面我们将对每一个模块进行介绍:
<!--提供相关的Maven默认依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.11</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
此标签会帮助我们寻找spring-boot-starter-parent
启动的父工程,spring-boot项目依赖此父工程进行版本管理,我们创建的工程都算作此父工程的子项目,我们的项目会依赖此父工程下载相关jar包的管理,并继承父工程的一些jar包。
<groupId>com.example</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>springboot</description>
此处是对当前工程项目的描述,任何spring框架下的项目都会有类似的描述信息,这些信息是我们在创建项目时所输入的。
<!--使用jdk8的版本-->
<properties>
<java.version>1.8</java.version>
</properties>
此处标注我们使用版本为8的JDK版本,也是我们创建项目时所选择的jdk版本。此处还可以添加项目编码,输出文件编码,spring-boot项目的具体版本等信息。
<dependencies>
<!--标注项目已web方式构建,会使用springMVC构建我们的代码-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--标注项目支持单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
此处标注我们的项目已springMVC的方式构建,并支持单元测试,引入springMVC及单元测试相关的依赖项。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
此处为我们添加的插件,其默认添加了maven.plugins插件,后期我们可以添加更多需要使用的插件来进行使用。
上面的这些依赖项,可能还依赖了其他的jar包,我们可以按住ctrl
键点击查看,这时候,我们就可以更加深入的理解maven和springboot管理jar包创建项目的好处了,如果我们自己手动添加,那将是巨大的工程量。
2.3 添加需要的依赖
我们可以自行在工程内添加自己需要的依赖,下面我们添加mysql的jar包依赖,首先在dependencies
标签内,鼠标右键选择Generate
选项内的Dependency Template
,会自动帮我们生成模板,在模板内输入mysql
后自动提示相关依赖选项:
输入相关信息后,点击右上角的刷新按钮,便会帮我们下载所添加的jar包依赖:
2.4 启动服务器
在初始创建的工程目录下,已经存在一个自动创建的类,这个类就是启动类:
这个类中的代码十分简单:
package com.example.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
@SpringBootApplication
是Sprnig Boot项目的核心注解,目的是开启自动配置,其是一个复合注解,包含了@SpringBootConfiguration
,@EnableAutoConfiguration
,@ComponentScan
这三个注解;@SpringBootConfiguration
注解,继承@Configuration
注解,主要用于加载配置文件,标注当前类是配置类, 并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名;@EnableAutoConfiguration
注解,作用是开启自动配置功能,其可以帮助SpringBoot应用将所有符合条件的@Configuration
配置都加载到当前SpringBoot创建并使用的IoC容器。借助于Spring框架原有的一个工具类:SpringFactoriesLoader的支持,@EnableAutoConfiguration
可以智能的自动配置功效才得以大功告成;@ComponentScan
注解,主要用于组件扫描和自动装配,其会自动扫描并加载符合条件的组件或bean定义,最终将这些bean定义加载到容器中。我们可以通过basePackages等属性指定@ComponentScan
自动扫描的范围,如果不指定,则默认Spring框架实现从声明@ComponentScan
所在类的package进行扫描,默认情况下是不指定的,所以SpringBoot的启动类最好放在root package下。- 在 Java 项目的 main 方法中,通过 SpringbootApplication 中的 main方法启动项目 。 第一个参数传入SpringbootApplication.class ,告诉 Spring 哪个是主要组件。第二个参数是运行时输入的其他参数。
我们选择运行当前启动类:
当控制台打印下列信息,即表示启动成功:
3.创建自定义类
我们在当前项目中创建自定义的类HelloWord.class,测试自定义资源的访问:
在类中定义get方法,来返回一句话:
package com.example.springboot;
public class HelloWord {
public String get(){
return "hello springboot!!";
}
}
为了让启动类能获取到当前类里的方法,我们需要在类上添加@RestController
注解,在方法上添加@RequestMapping
注解,并在@RequestMapping
注解中添加调用信息:
package com.example.springboot;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWord {
@RequestMapping("helloSpring")
public String get(){
return "hello springboot!!";
}
}
然后我们重新启动启动类来测试是否可以访问当前新创建的类,打开浏览器输入http://localhost:8080/
+在@RequestMapping注解中添加调用信息
来查看是否可以输出get方法返回的信息:
如上图,我们正确获取到了返回的信息,我们在自定义类中添加的注解,具体有什么作用呢?
@RestController
也是一个复合注解,其由@ResponseBody
和@Controller
俩个注解组成,其作用是将方法返回的对象直接在浏览器上以json格式展示。@ResponseBody
注解让方法返回值作为响应内容,也就是将java对象转换为前端格式的json串返回到前端。与之对应的还有@RequestBody
,其主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)。@Controller
注解主要用在控制器上,表明当前类为控制层代码,用来处理http请求。@RequestMapping
是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上,将 HelloWord类 注册到Spring MVC 容器中。
这些注解我们将在后续的学习中大量的学习使用,当前只需要大致理解其概念即可,在后续的使用中,可以深入的了解其作用。
在上面的案例中, @RestController
标注当前类为控制层类,其将方法返回的 “hello springboot!!” 字符串转换成json格式返回给浏览器,浏览器通过启动类的默认端口+ @RequestMapping
注解中提供的 “helloSpring” 接口,正确在Spring MVC 容器中寻找到要访问的资源,并展示。