1.springboot简介
-
核心能力:Spring容器、日志、自动配置AutoCongfiguration、Starters
-
web应用的能力:MVC、嵌入式Web服务器
-
数据访问(持久化):关系型数据库、非关系型数据库
-
强大的整合其他技术的能力
-
只要是Java中牛逼的技术,在SpringBoot中都有良好的支持
-
-
测试:强悍的应用测试
2.springboot版本问题
Spring Boot 的3.1.0正式发行版,使用Java 17,对应的Spring版本是6.0.9。
Servlet容器版本:
SpringBoot 支持如下的嵌入式Servlet容器,Spring Boot应用程序最低支持到Servlet 3.1的容器。
Name | Servlet Version |
---|---|
Tomcat10.1 | 6.0 |
Tomcat 9.0 | 4.0 |
Jetty 9.4 | 3.1 |
Undertow 2.0 | 4.0 |
3.springboot快速入门
-
创建Maven工程(使用java即可,使用springboot可能会出现版本问题)
-
pom.xml文件中配置起步依赖
<!--继承SpringBoot父POM文件-->
<!--web 开发的相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
</parent>
-
编写SpringBoot启动引导类
@Configuration//配置类
@EnableAutoConfiguration//开启自动配置
@ComponentScan//包扫描
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
}
-
编写Controller
-
访问http://localhost:8080/hello测试
4、SpringBoot原理分析
1.starters
==starters是依赖关系的整理和封装==。是一套依赖坐标的整合,可以让导入应用开发的依赖坐标更方便。
starter本质是一个pom.xml文件,里存储了很多坐标
利用依赖传递的特性:帮你把依赖打包了,starter
有了这些Starters,你获得Spring和其整合的所有技术的一站式服务。无需配置(自动配置)、无需复制粘贴依赖坐标,一个坐标即可完成所有入门级别操作。举例:Web开发,只需要导入
spring-boot-starter-web
。
2.依赖管理的原理
BOM(Bill of Materials)依赖清单,是由Maven提供的功能,<dependencyMangament>
BOM内定义成套相互兼容的jar包版本集合
使用依赖时,只需依赖该BOM文件,即可放心的使用清单内的依赖jar包,且无需版本号。
BOM设计初衷:方便维护项目依赖版本升级
依赖管理(Dependency Management)
-
继承了
spring-boot-starter-parent
的好处和特点-
默认编译Java 17
-
默认编码UTF-8
-
通过spring-boot-denpendencies的pom管理所有公共Starter依赖的版本
-
spring-boot-denpendencies通过Maven的一个<dependency management>特性来实现版本管理
-
随用随取,不用继承父类所有的starter依赖。
-
-
POM文件中的Maven插件
<!-- 作用:将一个SpringBoot的工程打包成为可执行的jar包 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
如果想使用父pom文件中的任何插件,无需配置即可使用
3.自动配置(AutoConfiguration)原理
SpringBoot采用约定大于配置设计思想,将所有可能遇到的配置信息提前配置好,写在自动配置的jar包中。每个Starter基本都会有对应的自动配置。
SpringBoot帮我们将配置信息写好,存放在一个jar包中:spring-boot-autoconfigure-3.1.0.jar
jar包里,存放的都是配置类,让配置类生效的"规则类"
查看启动类注解@SpringBootApplication
追踪步骤:
-
@SpringBootApplication
-
@EnableAutoConfiguration
-
@Import({AutoConfigurationImportSelector.class})
-
org.springframework.boot.autoconfigure.AutoConfiguration.imports
-
org.springframework.boot.autoconfigure.web.servlet.EmbeddedWebServerFactoryCustomizerAutoConfiguration
分析小节:
-
Starter:是一套依赖关系的整理和封装
-
让我们更加专注于业务开发,无需关心依赖导入,依赖冲突,及依赖的版本
-
在pom文件导入starter既可使用对应的功能
-
-
依赖管理:依赖管理是对依赖坐标的抽取和复用,统一管理依赖坐标的版本。
-
实现了依赖坐标的版本管理
-
starter随用随取
-
避免了继承所有父类starter的依赖的臃肿
-
避免了记忆所有starter的麻烦。
-
-
自动配置:预先写入配置类,封装到AutoConfiguration的jar包中,按需求加载配置信息。
-
基于约定大于配置的设计思想
-
极大的降低了Spring应用配置的复杂度
-
代码实现原理:@SpringBootApplication-->@EnableAutoConfiguration-->@AutoConfigurationPackage(spring-boot-autoconfigure-3.1.0.jar)
-
原理的核心在于:spring-boot-autoconfigure-3.1.0.jar包
-
- 当Spring Boot应用启动时,
@EnableAutoConfiguration
注解中的@Import(AutoConfigurationImportSelector.class)
会导入AutoConfigurationImportSelector
类。AutoConfigurationImportSelector
类的selectImports
方法会扫描所有具有META-INF/spring.factories
文件的jar包,并读取这些文件中与EnableAutoConfiguration
对应的配置类列表。- 这些配置类(通常是
xxxAutoConfiguration
形式的类)会被加载到Spring容器中,作为自动配置的Bean。
5.SpringBoot的配置文件
yml配置文件规则:
大小写敏感
数据值前边必须有空格,作为分隔符
使用缩进表示层级关系:
缩进不允许使用tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
‘#’表示注释,从这个字符一直到行尾,都会被解析器忽略。
数组和集合使用 “- ”表示数组每个元素
配置文件属性注入Bean@Value
6.SpringBoot与其他技术集成
1.集成MyBatis
依赖,其余都一样
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!--导入SpringBoot和MyBatis的整合包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2 集成Spring Data Redis
依赖
<!--导入redis的整合包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置文件
#配置redis数据库连接信息 spring: data: redis: host: localhost port: 6379
3.SpringBoot代码测试
<!--spring boot测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
4.springboot打jar包和war包
jar
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.x.x</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
war
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
- 如果是 WAR 包,主类需要继承
SpringBootServletInitializer
,并重写configure
方法。 -
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class YourApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }