基础知识#
约 760 个字 35 行代码 预计阅读时间 16 分钟
功能概述#
- 创建独立的 Spring 应用程序
- 直接嵌入 Tomcat、Jetty 或 Undertow(无需部署 WAR 文件)
- 提供预配置的 "starter" 依赖项,以简化构建配置
- 在可能的情况下,自动配置 Spring 和第三方库
- 提供生产就绪的功能,如指标、健康检查和外部化配置
- 绝不进行代码生成,也不需要 XML 配置
入门案例#
Maven方式#
- 创建Maven项目
- pom.xml继承
spring-boot-starter-parent
父项目,并引入相关依赖
,配置打包插件
:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.luguosong</groupId>
<artifactId>springboot-hello</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--继承父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
</parent>
<dependencies>
<!--引入web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!--SpringBoot项目打包-->
<!--包含Spring Boot的运行环境,比如Tomcat-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 创建Spring Boot配置文件
- 编写项目入口程序:
package com.luguosong;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Spring Boot启动类
*
* @author luguosong
*/
@SpringBootApplication
public class SpringBootHelloApplication {
/*
* Spring Boot启动代码
* */
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloApplication.class, args);
}
}
- 编写Controller:
package com.luguosong.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author luguosong
*/
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello Spring Boot";
}
}
Spring Initializr方式#
- 创建Spring Initializr项目
- 选中需要的启动器(spring-boot-starter-xxx)
- 创建工具会引入相关依赖,并自动生成
配置文件
和启动类
。
依赖管理机制#
场景启动器#
Spring场景启动器
会将该场景需要的依赖全部导入
场景启动器命名规则
- 官方场景:spring-boot-starter-xxx
- 第三方场景:xxx-spring-boot-starter
版本管理#
Spring Boot 父项目spring-boot-starter-parent
继承自spring-boot-dependencies
项目(版本仲裁中心),该项目通过 <dependencyManagement>
管理依赖版本。
Maven版本具有就近原则特性,如果我们不想使用Spring Boot提供的依赖版本。可以在当前项目自定义<properties>
标签自定义版本,标签名需要与spring-boot-dependencies中的一致。
自动配置机制#
spring-boot-autoconfigure依赖#
所有spring-boot-starter-xxx
启动器都会依赖spring-boot-starter
依赖。
spring-boot-starter
依赖内部会依赖spring-boot-autoconfigure
依赖。spring-boot-autoconfigure
负责自动配置。
配置属性类#
在Spring Boot配置文件application.yml
中,所有配置项
都和某个类的属性
值是一一绑定的。
比如,配置文件中的server.port
属性值就对应org.springframework.boot.autoconfigure.web.ServerProperties
类中的port
属性的值。
属性类可以通过@ConfigurationProperties
注解指定配置的前缀。
也可以使用@EnableConfigurationProperties
注解指定配置类:
按需自动配置#
spring-boot-autoconfigure
会使用@ConditionalOnxxx
条件注解在条件满足时自动配置。
@ConditionalOnClass
:如果类路径中存在该类,则触发指定行为。@ConditionalOnMissingClass
:如果类路径中不存在该类,则触发指定行为。@ConditionalOnBean
:如果容器中存在该类,则触发指定行为。@ConditionalOnMissingBean
:如果容器中不存在该类,则触发指定行为。
完整流程#
包扫描配置#
默认配置#
默认情况下,Spring Boot会扫描入口类下面以及其子包下的所有类。
@SpringBootApplication
public class SpringBootHelloApplication {
/*
* Spring Boot启动代码
* */
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloApplication.class, args);
}
}
scanBasePackages参数#
可以使用@SpringBootApplication
注解的scanBasePackages
参数来配置包的扫描范围。
@SpringBootApplication(scanBasePackages = "com.luguosong")
public class SpringBootHelloApplication {
/*
* Spring Boot启动代码
* */
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloApplication.class, args);
}
}
@ComponentScan注解#
可以使用@ComponentScan
注解来配置包的扫描范围
@SpringBootApplication
@ComponentScan("com.luguosong")
public class SpringBootHelloApplication {
/*
* Spring Boot启动代码
* */
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloApplication.class, args);
}
}