Spring Boot 从入门到高级详细讲解
一、Spring Boot 是什么?
1.1 Spring Boot 简介
Spring Boot 是基于 Spring Framework 的快速开发框架。
它的核心目标:
- 简化 Spring 项目开发
- 自动配置项目
- 快速整合第三方组件
- 提高开发效率
- 开箱即用
简单理解:
Spring Boot = Spring + 自动配置 + 快速开发
二、为什么使用 Spring Boot
传统 Spring 开发:
xml
<bean id="userService" class="com.demo.UserService" />
需要大量:
- XML 配置
- Bean 配置
- Tomcat 配置
- 数据源配置
- Maven 配置
Spring Boot:
java
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
即可启动项目。
三、Spring Boot 核心优点
| 优点 | 说明 |
|---|---|
| 自动配置 | 自动帮你配置 Spring 环境 |
| 内置服务器 | 内置 Tomcat,无需额外安装 |
| 快速开发 | 几分钟即可启动项目 |
| Starter 启动器 | 一键整合第三方框架 |
| 微服务友好 | Spring Cloud 官方支持 |
| 配置简单 | application.yml 即可管理配置 |
| 社区庞大 | 企业级主流框架 |
四、Spring Boot 环境安装
4.1 安装 JDK
推荐版本:
- JDK 17(推荐)
- JDK 21(最新 LTS)
查看版本:
bash
java -version
4.2 安装 Maven
查看版本:
bash
mvn -v
Maven 用于:
- 管理依赖
- 打包项目
- 自动下载 jar
4.3 创建 Spring Boot 项目
官方初始化网站:
可选择:
| 选项 | 说明 |
|---|---|
| Maven | 项目管理工具 |
| Java | 开发语言 |
| Spring Boot | 框架版本 |
| Jar | 打包方式 |
五、第一个 Spring Boot 项目
5.1 项目结构
text
src
├── main
│ ├── java
│ └── resources
│ ├── static
│ ├── templates
│ └── application.yml
5.2 启动类
java
package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* SpringBoot 启动类
*/
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
5.3 编写 Controller
java
package com.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试控制器
*/
@RestController
public class HelloController {
/**
* 测试接口
*/
@GetMapping("/hello")
public String hello() {
return "Hello Spring Boot";
}
}
访问:
text
http://localhost:8080/hello
六、Spring Boot 核心注解详解
6.1 @SpringBootApplication
这是 Spring Boot 核心注解。
等价于:
java
@Configuration
@EnableAutoConfiguration
@ComponentScan
作用:
| 注解 | 作用 |
|---|---|
| @Configuration | 标识配置类 |
| @EnableAutoConfiguration | 开启自动配置 |
| @ComponentScan | 自动扫描组件 |
6.2 @RestController
表示:
- 当前类是控制器
- 返回 JSON 数据
java
@RestController
public class UserController {
}
6.3 @RequestMapping
用于接口路径映射。
java
@RequestMapping("/user")
6.4 @GetMapping
GET 请求。
java
@GetMapping("/list")
6.5 @PostMapping
POST 请求。
java
@PostMapping("/save")
6.6 @Autowired
自动注入对象。
java
@Autowired
private UserService userService;
6.7 @Service
业务层注解。
java
@Service
public class UserService {
}
6.8 @Repository
数据层注解。
java
@Repository
public class UserDao {
}
6.9 @Component
普通组件。
java
@Component
public class Utils {
}
七、Spring Boot 配置文件详解
7.1 application.properties
properties
server.port=8081
7.2 application.yml(推荐)
yaml
server:
port: 8081
YAML 更适合层级配置。
7.3 常用配置
修改端口
yaml
server:
port: 8082
修改项目路径
yaml
server:
servlet:
context-path: /api
数据库配置
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
八、Spring Boot 整合 MySQL
8.1 添加依赖
xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
8.2 配置数据库
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo
username: root
password: 123456
九、Spring Boot 整合 MyBatis
9.1 添加依赖
xml
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
9.2 编写实体类
java
package com.demo.entity;
/**
* 用户实体类
*/
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
9.3 Mapper 接口
java
package com.demo.mapper;
import com.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
/**
* 查询所有用户
*/
@Select("select * from user")
List<User> findAll();
}
9.4 Service 层
java
package com.demo.service;
import com.demo.entity.User;
import com.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
/**
* 获取所有用户
*/
public List<User> list() {
return userMapper.findAll();
}
}
9.5 Controller 层
java
package com.demo.controller;
import com.demo.entity.User;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/list")
public List<User> list() {
return userService.list();
}
}
十、Spring Boot 生命周期
10.1 Bean 生命周期
流程:
text
实例化
↓
属性注入
↓
初始化
↓
使用
↓
销毁
十一、Spring Boot 自动配置原理
Spring Boot 最核心的机制。
11.1 自动配置原理
核心注解:
java
@EnableAutoConfiguration
Spring Boot 启动时:
- 扫描依赖
- 判断 jar 是否存在
- 自动加载配置
- 自动创建 Bean
例如:
导入:
xml
spring-boot-starter-web
Spring Boot 自动:
- 配置 Tomcat
- 配置 Spring MVC
- 配置 DispatcherServlet
十二、Spring Boot Starter 启动器
12.1 常见 Starter
| Starter | 作用 |
|---|---|
| spring-boot-starter-web | Web 开发 |
| spring-boot-starter-test | 单元测试 |
| spring-boot-starter-jdbc | JDBC |
| spring-boot-starter-data-jpa | JPA |
| spring-boot-starter-security | 安全认证 |
| spring-boot-starter-thymeleaf | 模板引擎 |
| spring-boot-starter-validation | 参数校验 |
十三、Spring Boot 参数接收
13.1 接收普通参数
java
@GetMapping("/test")
public String test(String name) {
return name;
}
13.2 @RequestParam
java
@GetMapping("/test")
public String test(@RequestParam String name) {
return name;
}
13.3 @PathVariable
java
@GetMapping("/user/{id}")
public Integer test(@PathVariable Integer id) {
return id;
}
13.4 @RequestBody
接收 JSON。
java
@PostMapping("/save")
public User save(@RequestBody User user) {
return user;
}
十四、Spring Boot 返回 JSON
Spring Boot 默认集成 Jackson。
java
@GetMapping("/user")
public User user() {
User user = new User();
user.setName("张三");
return user;
}
自动返回:
json
{
"name": "张三"
}
十五、Spring Boot 统一返回结果
15.1 Result 类
java
package com.demo.common;
/**
* 统一返回结果
*/
public class Result<T> {
private Integer code;
private String message;
private T data;
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>();
result.code = 200;
result.message = "成功";
result.data = data;
return result;
}
}
十六、Spring Boot 异常处理
16.1 全局异常处理
java
package com.demo.exception;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 全局异常
*/
@ExceptionHandler(Exception.class)
public String error(Exception e) {
return e.getMessage();
}
}
十七、Spring Boot 参数校验
17.1 添加依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
17.2 实体校验
java
package com.demo.entity;
import jakarta.validation.constraints.NotBlank;
public class User {
@NotBlank(message = "用户名不能为空")
private String name;
}
17.3 开启校验
java
@PostMapping("/save")
public String save(@Valid @RequestBody User user) {
return "success";
}
十八、Spring Boot 文件上传
18.1 前端表单
html
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
</form>
18.2 后端上传
java
@PostMapping("/upload")
public String upload(MultipartFile file) throws Exception {
file.transferTo(new File("D:/" + file.getOriginalFilename()));
return "上传成功";
}
十九、Spring Boot 拦截器
19.1 创建拦截器
java
package com.demo.interceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
System.out.println("进入拦截器");
return true;
}
}
19.2 注册拦截器
java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**");
}
}
二十、Spring Boot 过滤器 Filter
java
@WebFilter("/*")
public class TestFilter implements Filter {
}
二十一、Spring Boot AOP 面向切面
21.1 AOP 是什么
AOP = 面向切面编程。
作用:
- 日志
- 权限
- 性能监控
- 事务
21.2 AOP 示例
java
@Aspect
@Component
public class LogAspect {
@Before("execution(* com.demo.service.*.*(..))")
public void before() {
System.out.println("方法执行前");
}
}
二十二、Spring Boot 事务管理
22.1 开启事务
java
@Transactional
public void save() {
}
事务作用:
- 保证数据一致性
- 回滚错误操作
二十三、Spring Boot 日志
23.1 默认日志
Spring Boot 默认使用:
- SLF4J
- Logback
23.2 日志使用
java
private static final Logger log = LoggerFactory.getLogger(Test.class);
log.info("启动成功");
二十四、Spring Boot 热部署
24.1 DevTools
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
作用:
- 自动重启
- 提高开发效率
二十五、Spring Boot 打包部署
25.1 Maven 打包
bash
mvn clean package
生成:
text
target/demo.jar
25.2 启动 jar
bash
java -jar demo.jar
二十六、Spring Boot 多环境配置
26.1 application-dev.yml
yaml
server:
port: 8081
26.2 application-prod.yml
yaml
server:
port: 8082
26.3 指定环境
yaml
spring:
profiles:
active: dev
二十七、Spring Boot 常见目录结构
text
com.demo
├── controller
├── service
├── mapper
├── entity
├── config
├── common
├── utils
└── exception
二十八、Spring Boot + Redis
28.1 添加依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
28.2 Redis 配置
yaml
spring:
data:
redis:
host: localhost
port: 6379
二十九、Spring Boot + JWT 登录认证
29.1 JWT 是什么
JWT 是一种 Token 登录认证方式。
特点:
- 无状态
- 分布式友好
- 常用于前后端分离
29.2 JWT 流程
text
登录
↓
生成 Token
↓
返回前端
↓
前端携带 Token
↓
后端校验 Token
三十、Spring Boot + Vue 前后端分离
30.1 开发流程
text
Vue
↓ HTTP
Spring Boot
↓
MySQL
三十一、Spring Boot + Spring Security
31.1 Spring Security
Spring 官方安全框架。
功能:
- 登录认证
- 权限管理
- JWT
- OAuth2
三十二、Spring Boot + Swagger
32.1 Swagger 作用
自动生成接口文档。
32.2 访问地址
text
http://localhost:8080/swagger-ui/index.html
三十三、Spring Boot + Docker
33.1 Dockerfile
dockerfile
FROM openjdk:17
COPY demo.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
三十四、Spring Boot 微服务
34.1 Spring Cloud
Spring Cloud 是微服务框架。
组件:
| 组件 | 作用 |
|---|---|
| Gateway | 网关 |
| Nacos | 注册中心 |
| OpenFeign | 服务调用 |
| Sentinel | 熔断限流 |
三十五、Spring Boot 面试高频问题
35.1 Spring Boot 和 Spring 区别
| Spring | Spring Boot |
|---|---|
| 配置复杂 | 自动配置 |
| XML 多 | 零配置 |
| 开发慢 | 快速开发 |
35.2 Spring Boot 自动配置原理
核心:
- SPI
- spring.factories
- AutoConfiguration
35.3 @Autowired 和 @Resource 区别
| 注解 | 来源 |
|---|---|
| @Autowired | Spring |
| @Resource | JDK |
35.4 Spring Boot 如何解决循环依赖
三级缓存。
35.5 Bean 是单例吗
默认单例。
java
@Scope("prototype")
可改为多例。
三十六、Spring Boot 性能优化
36.1 常见优化
| 优化 | 说明 |
|---|---|
| 使用连接池 | 提高数据库性能 |
| Redis 缓存 | 减少数据库压力 |
| 异步线程池 | 提高吞吐量 |
| SQL 优化 | 避免慢查询 |
| JVM 调优 | 减少 GC |
三十七、Spring Boot 常见错误
37.1 端口被占用
text
Web server failed to start
解决:
修改端口。
37.2 数据库连接失败
text
Communications link failure
原因:
- MySQL 未启动
- 用户名密码错误
三十八、Spring Boot 学习路线
初级阶段
学习:
- Java 基础
- Spring Boot 基础
- MySQL
- RESTful API
中级阶段
学习:
- MyBatis
- Redis
- JWT
- Vue
- Linux
高级阶段
学习:
- 微服务
- Spring Cloud
- Docker
- Kubernetes
- JVM 调优
- 分布式
三十九、推荐学习资源
官方文档
Spring Boot 官方文档
Spring 官方文档
视频学习
B站
搜索:
- Spring Boot
- 黑马程序员
- 尚硅谷
学习网站
| 网站 | 用途 |
|---|---|
| https://github.com | 开源项目 |
| https://stackoverflow.com | 技术问答 |
| https://mvnrepository.com | Maven 仓库 |
| https://spring.io | 官方文档 |
四十、企业项目开发流程
text
需求分析
↓
数据库设计
↓
接口设计
↓
后端开发
↓
前端开发
↓
联调测试
↓
上线部署
四十一、Spring Boot 企业最佳实践
推荐规范
| 规范 | 说明 |
|---|---|
| Controller 不写业务 | 业务放 Service |
| Service 不写 SQL | SQL 放 Mapper |
| 使用统一返回结构 | 方便前端处理 |
| 使用全局异常 | 避免重复 try-catch |
| 使用日志 | 方便排查问题 |
| 参数校验 | 提高安全性 |
四十二、总结
Spring Boot 是目前 Java 后端开发最主流框架之一。
适用于:
- 企业后台
- 管理系统
- 电商系统
- API 服务
- 微服务架构
掌握 Spring Boot 后,建议继续学习:
text
Spring MVC
↓
MyBatis
↓
Redis
↓
Spring Security
↓
Spring Cloud
↓
Docker
↓
微服务架构
四十三、完整学习建议
如果你是零基础
推荐顺序:
text
JavaSE
↓
数据库 MySQL
↓
HTML + CSS + JavaScript
↓
Spring
↓
Spring MVC
↓
Spring Boot
↓
MyBatis
↓
Redis
↓
Vue
↓
Spring Cloud
四十四、开发工具推荐
| 工具 | 用途 |
|---|---|
| IntelliJ IDEA | Java 开发 |
| Navicat | 数据库管理 |
| Postman | 接口测试 |
| Apifox | API 管理 |
| Git | 版本控制 |
| Docker | 容器部署 |
四十五、RESTful API 规范
接口规范示例
| 请求 | 接口 |
|---|---|
| GET | /user/list |
| GET | /user/1 |
| POST | /user |
| PUT | /user |
| DELETE | /user/1 |
四十六、Spring Boot 常用注解总表
| 注解 | 作用 |
|---|---|
| @SpringBootApplication | 启动类 |
| @RestController | 返回 JSON |
| @Controller | MVC 页面控制 |
| @Service | Service 层 |
| @Repository | Dao 层 |
| @Autowired | 自动注入 |
| @Value | 读取配置 |
| @Configuration | 配置类 |
| @Bean | 注册 Bean |
| @Transactional | 事务 |
| @RequestBody | 接收 JSON |
| @PathVariable | 路径参数 |
| @RequestParam | 请求参数 |
四十七、Spring Boot 企业项目模块
text
用户模块
权限模块
订单模块
支付模块
文件模块
日志模块
消息模块
统计模块
四十八、未来发展方向
Java 后端方向
- 高并发
- 微服务
- AI 后端
- 云原生
- 大数据
- 分布式架构
四十九、最后建议
真正学会 Spring Boot 的核心:
不是背注解。
而是理解:
- IOC
- AOP
- 自动配置
- MVC
- Bean 生命周期
- 事务
- 微服务架构
只有理解底层原理,才能真正成为高级 Java 后端工程师。
五十、结束语
学习 Spring Boot 最重要的是:
- 多写项目
- 多调试
- 多看源码
- 多解决 Bug
建议练习项目:
- 博客系统
- 用户管理系统
- 电商后台
- 文件管理系统
- 在线商城
- OA 系统
当你能独立完成完整后台项目时,Spring Boot 才算真正入门。