SpringBoot
1、简介和原理
1.1、简介
随着功能的不断增多,Spring的搭建也越来越复杂,而Spring Boot 是 Pivotal 团队在 Spring 的基础上提供的一套全新的开源框架,其目的是为了简化 Spring 应用的搭建和开发过程。Spring Boot 去除了大量的 XML 配置文件,简化了复杂的依赖管理,它集成了大量常用的第三方库配置,大部分的 Spring Boot 应用都只需要非常少量的配置代码(基于 Java 的配置),开发者能够更加专注于业务逻辑。
SpringBoot就是为了简化开发,核心思想是约定大于配置。
它有以下特点:
- 通过jar包独立运行Spring项目(内嵌服务器,直接通过主配置类运行程序)
- war:web项目打包,需要安装Tomcat,在wabapps下运行,适合用在产品发布阶段,打war包可以通过ServletContextInitializer
- 在pom文件中将jar改为war
- 从依赖中排除内置的Tomcat容器:可以通过添加Tomcat依赖或者在spring-boot-starter-web中排除Tomcat
- 新建类继承SpringBootServletContextInitializer
- 通过maven命令mvn clean package编译
- jar:归类文档,可以通过内嵌的Tomcat运行,不用另安Tomcat,比较方便,适合开发阶段使用、
- war:web项目打包,需要安装Tomcat,在wabapps下运行,适合用在产品发布阶段,打war包可以通过ServletContextInitializer
- 内嵌Servlet容器(Tomcat、jetty等容器)
- 提供了Start启动器来导入相关依赖,简化了配置
- 为jar包内的类自动装配Bean
- 项目监控
- 通过注解实现,无XML配置文件
需要注意是是SpringBoot3.x 的版本,它是基于 Spring6的,要求Spring Framework 6.0.0 及以上版本,JDK17及其以上版本, 开发工具IntelliJ IDEA 2021.2.1以及更高版本,TomCat10及其以上版本。
1.2、创建SpringBoot
在使用 Spring Boot 进行开发之前,第一件事就是配置好开发环境。Maven、JDK等等都需要配置好。可以通过IDE创建项目,也可以通过官网创建
-
通过官网网站常见项目 SpringBoot
-
使用IDEA搭建
https://start.spring.io连接不上的话,可以改成阿里的https://start.aliyun.com/
SpringBoot只需要在项目创建时导入了关键的几个启动器后,就可以直接通过主配置类启动了,在不经过任何配置的情况下就可以访问Controller等组件,Controller等文件夹需要和启动类在同一包下。
![image-20230307135931010](https://i-blog.csdnimg.cn/blog_migrate/cb246f0198230d2c335655f9cf5acf06.png)
logo标志(可自己更改),标志SpringBoot项目开始启动
在Resources 下的 templates 下创建 index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello SpringBoot</h1>
</body>
</html>
不需要配置视图解析器,不需要配置DispatcherServlet,不需要配置包的扫描,在没有任何配置的情况下即可直接访问:
1.3、启动器
1.3.1、启动器简介
启动器是spring的启动场景,格式为:<artifactId>spring-boot-starter-**</artifactId>
,它会将一些功能场景如 SpringMVC、test等等的相关依赖统一成一个启动器,然后用相应的启动器,获取在spring-boot-dependencies管理的依赖。这是一种插件机制,它抛弃了Spring 中繁琐的配置,将复杂依赖统一集成进 starter。
我们可以打开 pom 文件查看SpringBoot的依赖,不同于之前的Spring依赖,它是以一个个的启动器的形式展现的。
![image-20220919095836861](https://i-blog.csdnimg.cn/blog_migrate/1d916bcfdc434919efe7f5155ed4c6cf.png)
SpringBoot将Spring中使用的很多依赖进行了整合,它将同一场景下的所有依赖进行整合做成一个 starter,我们导入了starter 就相当于添加了此场景下的所有依赖。
比如支持 web 环境的启动器:spring-boot-starter-web(Web 场景启动器)。
![image-20230307142159590](https://i-blog.csdnimg.cn/blog_migrate/a88bbe91d4296d446ef73a5ac8e4fdad.png)
它是为整个web开发予以支持,为我们提供了嵌入的 Servlet 容器、SpringMVC 等相关依赖,并为 Spring MVC 提供了大量自动配置。他在 Spring MVC 默认功能的基础上添加了以下特性:
- 引入了 ContentNegotiatingViewResolver 和 BeanNameViewResolver(视图解析器)
- 对包括 WebJars 在内的静态资源的支持
- 自动注册 Converter、GenericConverter 和 Formatter (转换器和格式化器)
- 对 HttpMessageConverters 的支持(Spring MVC 中用于转换 HTTP 请求和响应的消息转换器)
- 自动注册 MessageCodesResolver(用于定义错误代码生成规则)
- 支持对静态首页(index.html)的访问
- 自动使用 ConfigurableWebBindingInitializer
所以我们在使用中仅需要在依赖中引入相关启动器即可使用相关的所有依赖。
1.3.2、父依赖
SpringBoot之所以能自动加载相关的依赖,甚至不需要指定依赖的版本,是因为它们的版本是由 spring-boot-starter-parent进行管理的,它是所有 Spring Boot 项目的父级依赖,它的存在主要是为了管理项目的资源过滤及插件。
![image-20220919100809948](https://i-blog.csdnimg.cn/blog_migrate/cecc42634be897425acb6a13eef467d7.png)
Spring Boot 项目可以通过继承 spring-boot-starter-parent 来获得一些合理的默认配置,它主要提供了以下特性:
- 默认 JDK 版本(Springboot 2的是JDK 8、Springboot3的是JDK 17)
- 默认字符集(UTF-8)
- 依赖管理功能
- 资源过滤
- 默认插件配置
- 识别 application.properties 和 application.yml 类型的配置文件
在pom文件中点开spring-boot-starter-parent,可以查看其底层代码:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<!--管理spring的所有核心依赖,通过启动器自动去装配相关依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.3</version>
</parent>
..........
<!-- 默认 JDK 版本(Java 8)(Springboot3版本默认的是17)、默认字符集(UTF-8) 等配置-->
<properties>
<java.version>1.8</java.version>
<resource.delimiter>@</resource.delimiter>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<url>https://spring.io/projects/spring-boot</url>
....许可证、开发商等等信息.....
<build>
<resources>
<!--配置文件的默认路径(yml、properties等文件) -->
</resources>
<pluginManagement>
<!--插件-->
</pluginManagement>
</build>
</project>
其中在 内有一个:spring-boot-dependencies,它是用来管理spring的所有依赖的,是Springboot的版本控制中心,我们导入的启动器就是在这里选择相应的依赖加入项目的。(如果导入的依赖在这个文件内存在则不需要加版本,如果不存在则需要我们手动添加版本)
![image-20230307144152154](https://i-blog.csdnimg.cn/blog_migrate/ee2c0de853401013c51df8a23fcb6650.png)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.3</version>
<packaging>pom</packaging>
<name>spring-boot-dependencies</name>
<description>Spring Boot Dependencies</description>
<url>https://spring.io/projects/spring-boot</url>
<properties>
<!--这里是对应依赖的版本-->
</properties>
<dependencyManagement>
<!--这里管理了大量的依赖-->
</dependencyManagement>
<build>
<pluginManagement>
<!--负责管理插件-->
</pluginManagement>
</build>
</project>