SpringBoot概述
SpringBoot概述
SpringBoot的特性
起步依赖(Starter POMs)
-
Spring Boot 提供了一系列的 Starter 依赖,这些依赖将常用的库和配置打包在一起,开发者只需引入一个 Starter 依赖,即可自动引入相关的库和默认配置。
-
Stater 通常用于管理项目的初始结构和依赖版本,提供一些基础配置和模板,帮助快速搭建项目框架。
-
它主要包含项目的基础配置、依赖管理(如 Maven 或 Gradle 配置)和一些通用的代码模板。
-
Stater 本身不包含具体业务逻辑,更多是提供一种标准化的项目结构。
- Autoconfig 是 Spring Boot 中的自动配置模块,负责根据项目依赖自动配置相应的 Bean 和组件。
- 它包含实际的配置代码,根据条件(如类路径、配置文件等)决定如何配置应用。
-
优点:
- 简化依赖管理:无需手动添加多个依赖,Starter 依赖会自动引入相关的库。
- 版本兼容性:Spring Boot 管理的依赖版本经过严格测试,确保兼容性。
- 开箱即用:Starter 依赖通常包含默认配置,开发者可以直接使用。
-
常见的 Starter 依赖:
- Web 开发:
spring-boot-starter-web- 包含 Spring MVC、Tomcat、Jackson 等。
- 数据访问:
spring-boot-starter-data-jpa- 包含 Spring Data JPA、Hibernate、数据源配置等。
- 安全控制:
spring-boot-starter-security- 包含 Spring Security 相关依赖。
- 测试:
spring-boot-starter-test- 包含 JUnit、Mockito、Spring Test 等测试框架。
- Web 开发:
-
依赖版本管理
-
Spring Boot 通过 Bill of Materials (BOM) 机制管理依赖版本。在
spring-boot-starter-parent或spring-boot-dependencies中定义了所有依赖的版本号,开发者无需手动指定版本。-
优点
- 版本一致性:所有依赖的版本由 Spring Boot 统一管理,避免版本冲突。
- 简化配置:无需在
pom.xml中为每个依赖指定版本号。
-
继承
spring-boot-starter-parent-
在
pom.xml中继承spring-boot-starter-parent,即可使用 Spring Boot 的依赖版本管理。 -
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.0</version> <!-- 使用最新版本 --> </parent> -
自动继承 Spring Boot 的默认配置和插件配置。
-
如果项目已经继承了其他父 POM,则无法使用此方式。
-
-
引入
spring-boot-dependencies-
如果项目无法继承
spring-boot-starter-parent,可以通过dependencyManagement引入spring-boot-dependencies。 -
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>3.1.0</version> <!-- 使用最新版本 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> -
灵活性高,适合需要自定义父 POM 的项目。
-
可以与其他 BOM 文件一起使用。
-
-
-
虽然 Spring Boot 提供了默认的依赖版本,但开发者可以根据需要覆盖这些版本。
-
优点:
- 灵活性:开发者可以自定义依赖版本,满足特定需求。
- 覆盖版本时需确保新版本与 Spring Boot 的其他依赖兼容。
- 建议优先使用 Spring Boot 管理的版本,除非有特殊需求。
-
-
Spring Boot 支持排除不需要的传递依赖,避免冲突或冗余。
-
优点:
- 减少冗余:排除不需要的依赖,减小项目体积。
- 解决冲突:排除冲突的依赖版本,确保项目正常运行。
-
-
自动配置(Auto-Configuration)
-
Spring Boot 的自动配置(Auto-Configuration)是其核心特性之一,旨在减少开发者的配置工作,通过智能推断和默认配置,快速启动和运行 Spring 应用。
-
Spring Boot 的自动配置基于以下原则:
- 约定优于配置:提供合理的默认配置,开发者只需在需要时覆盖默认行为。
- 条件化配置:根据项目的依赖和类路径中的类,动态决定是否启用某些配置。
- 零 XML 配置:完全基于 Java 注解和条件化配置,无需编写 XML 文件。
-
自动配置实现原理
-
条件注解(Conditional Annotations)
-
Spring Boot 使用一系列条件注解来决定是否加载某个配置类或 Bean。常见的条件注解包括:
-
@ConditionalOnClass:当类路径中存在指定的类时,才加载配置。 -
@ConditionalOnMissingBean:当容器中不存在指定的 Bean 时,才加载配置。 -
@ConditionalOnProperty:当配置文件中存在指定的属性时,才加载配置。 -
@ConditionalOnWebApplication:当应用是 Web 应用时,才加载配置。 -
@Configuration @ConditionalOnClass(DataSource.class) @ConditionalOnMissingBean(DataSource.class) public class DataSourceAutoConfiguration { // 自动配置数据源 } -
表示当类路径中存在
DataSource.class且容器中没有DataSourceBean 时,才会自动配置数据源(也就是导入了DataSource相关jar包之后,该class文件会在项目的类路径下)
-
-
-
自动配置类
@EnableAutoConfiguration是 Spring Boot 自动装配的核心注解。它的作用是启用 Spring Boot 的自动配置机制。@SpringBootApplication注解中已经包含了@EnableAutoConfiguration,因此大多数情况下不需要显式使用@EnableAutoConfiguration。@EnableAutoConfiguration会扫描类路径下的依赖,并根据条件自动配置 Spring 应用。
- Spring Boot 的自动配置类通常位于
spring-boot-autoconfigure模块中,命名规则为XXXAutoConfiguration。例如:DataSourceAutoConfiguration:自动配置数据源。WebMvcAutoConfiguration:自动配置 Spring MVC。JacksonAutoConfiguration:自动配置 JSON 序列化。
- 这些类通过
@Configuration注解标识,并通过条件注解控制是否生效。
-
spring.factories文件-
Spring Boot 通过
META-INF/spring.factories文件加载自动配置类。该文件中列出了所有自动配置类的全限定名, -
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.MyAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration -
Spring Boot 在启动时会读取该文件,并根据条件注解决定是否加载这些配置类。
-
在 Spring Boot 2.x 及更早版本中,
META-INF/spring.factories是自动配置的核心文件。- 特点
- 每一行都是一个接口或注解的全限定名,后面跟着实现类或配置类的全限定名。
- 多个类之间用逗号分隔。
- 缺点:
- 文件格式不够直观,容易出错。
- 不支持模块化加载,所有配置类都集中在一个文件中。
- 特点
-
在 Spring Boot 3.0 中,Spring 团队引入了一种新的机制来替代
META-INF/spring.factories,即META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件。-
每一行都是一个自动配置类的全限定名。
-
com.example.MyAutoConfiguration com.example.AnotherAutoConfiguration -
文件路径固定为
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports。
-
-
-
禁用自动配置
-
如果不需要某些自动配置,可以使用
@EnableAutoConfiguration的exclude属性:-
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } -
或者在配置文件中禁用
-
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
-
-
-
-
自定义自动配置类
- 创建自定义的
XXXAutoConfiguration类。 - 使用条件注解控制配置的加载。
- 在
spring.factories文件中注册自动配置类。
- 创建自定义的
独立运行(Standalone)
- Spring Boot 的独立运行(Standalone)特性是其核心优势之一,允许开发者将应用打包成可执行的 JAR 或 WAR 文件,无需依赖外部应用服务器(如 Tomcat、Jetty 等)。
- 独立运行的核心思想
- Spring Boot 的独立运行基于以下原则:
- 内嵌服务器:Spring Boot 应用内嵌了 Tomcat、Jetty 或 Undertow 服务器,无需额外部署。Spring Boot 会自动启动内嵌服务器。
- Tomcat:默认内嵌服务器,适合大多数 Web 应用。
- Jetty:轻量级服务器,适合资源受限的环境。
- Undertow:高性能服务器,适合高并发场景。
- 可执行 JAR/WAR:应用可以打包成包含所有依赖的可执行文件,直接通过
java -jar命令运行。这些文件包含以下内容:- 应用代码:编译后的 Java 类文件。
- 依赖库:所有第三方库和 Spring Boot 的依赖。
- 内嵌服务器:Tomcat、Jetty 或 Undertow。
- 启动脚本:用于启动应用的脚本。
- 简化部署:减少对外部环境的依赖,适合云原生和容器化部署。
- 内嵌服务器:Spring Boot 应用内嵌了 Tomcat、Jetty 或 Undertow 服务器,无需额外部署。Spring Boot 会自动启动内嵌服务器。
- Spring Boot 的独立运行基于以下原则:
配置的优先级顺序
配置优先级如下,从高到底依次为:
- 命令行参数。
- Java 系统属性(
System.getProperties())。 - 操作系统环境变量。
- 外部配置文件(按以下顺序加载):
- 当前目录的
/config子目录。 - 当前目录。
- classpath 下的
/config目录。 - classpath 根目录。
- 当前目录的
- Profile 特定的配置文件(
application-{profile}.properties或application-{profile}.yml)。 - 默认配置文件(
application.properties或application.yml)。 @Configuration类中的@PropertySource。- Spring Boot 默认属性。
注意点:
- 优先级越低的配置越会优先读取,后加载的配置会覆盖前面的配置
静态资源目录
Spring Boot 默认会在以下路径中查找静态资源:
classpath:/static/classpath:/public/classpath:/resources/classpath:/META-INF/resources/
需要将静态资源放到对应目录下才能正确找到静态资源文件
Spring Boot 在加载静态资源时,会按照以下优先级查找:优先级从高到低依次为
classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/
如果多个目录中存在同名文件,优先级高的目录中的文件会被加载。

浙公网安备 33010602011771号