前言:为什么选择 Spring Boot? 🚀
在现代 Java 开发中,Spring Boot 已成为最流行的后端框架之一。无论是小型 Web 应用、企业级系统,还是微服务架构,Spring Boot 都能提供快速开发、自动配置、轻量级部署的特性,让开发者无需关心繁琐的环境搭建和依赖管理。
🤔 为什么要学习 Spring Boot?
在 Spring 生态系统中,Spring Framework 提供了强大的开发能力,但其复杂的 XML 配置、依赖管理和 Bean 组件注册,让新手开发者望而却步。Spring Boot 诞生的目标,就是让 Spring 开发更简单、更高效。
Spring Boot 具备以下核心优势:
✅ 零配置 —— 基于自动配置(Spring Boot Starter),无需手动配置繁琐的 XML 文件。
✅ 内置服务器 —— 自带 Tomcat、Jetty、Undertow,无需额外部署容器。
✅ 快速开发 —— 使用 Spring Initializr 快速生成项目,开箱即用。
✅ 微服务支持 —— 与 Spring Cloud 无缝集成,轻松构建分布式系统。
✅ 简化依赖管理 —— 通过 Maven / Gradle 直接引入 Spring Boot Starter 依赖,避免版本冲突。
✅ 强大的生态 —— 丰富的官方 Starter 组件(如 Spring Data JPA、Spring Security、Spring Mail),适配多种业务场景。
🎯 你将学到什么?
Spring Boot 基础(自动配置、RESTful API 开发)
数据库整合(MySQL + JPA/MyBatis)
Spring Boot 进阶(AOP、定时任务、异步任务)
安全与认证(Spring Security + JWT)
项目实战(完整的用户管理系统)
Spring Boot 让 Java 开发更高效,现在就开启你的 Spring Boot 之旅吧! 🚀
1. SpringBoot介绍
在学习SpringBoot之前,我们先来认识⼀下Spring
我们看下Spring官⽅
Spring | HomeLevel up your Java code and explore what Spring can do for you.https://spring.io/
可以看到,Spring让Java程序更加快速,简单和安全.Spring对于速度、简单性和⽣产⼒的关注使其成为 世界上最流⾏的Java框架。
Spring官⽅提供了很多开源的项⽬,覆盖范围从Web开发到⼤数据,Spring发展到了今天,已经形成了⾃ ⼰的⽣态圈.我们在开发时,也倾向于使⽤Spring官⽅提供的技术,来解决对应的问题.
这些项⽬都是基于SpringFramework来进⾏开发的,但是SpringFramework存在配置多,⼊⻔难的问 题,Spring也意识到了这个问题,为了简化开发者的使⽤,从⽽创造性的推出了SpringBoot.
📌 1. 什么是 Spring Boot?
Spring Boot 是基于 Spring 框架的快速开发框架,它提供了一种开箱即用(out-of-the-box)的方式,让开发者能够无需复杂配置,快速构建和部署 Java 应用。
Spring Boot 通过自动配置、内置服务器、简化依赖管理等特性,大大降低了 Spring 开发的复杂度,使开发者可以专注于业务逻辑,而不需要花费大量时间在环境搭建和配置上。
📌 2. Spring Boot vs Spring Framework vs Spring MVC(区别与联系)
对比项 | Spring Framework | Spring MVC | Spring Boot |
---|---|---|---|
核心作用 | 提供完整的企业级 Java 解决方案 | 基于 Spring 的 Web 框架 | 让 Spring 开发更简单 |
配置方式 | 需要大量 XML 配置 | 需要手动配置 Controller 和 DispatcherServlet | 自动配置,开箱即用 |
依赖管理 | 需要手动管理依赖 | 依赖 Spring Framework | 通过 Starter 统一管理依赖 |
服务器 | 需要手动配置 Tomcat 等 | 依赖外部 Web 容器 | 内置 Tomcat、Jetty,直接运行 |
适用场景 | 复杂的企业级系统 | 传统 Web 应用 | REST API、微服务、云原生 |
✅ 总结: Spring Boot 基于 Spring Framework 和 Spring MVC,它整合了 Spring 生态系统,并通过自动配置和内置依赖,极大地简化了 Spring 开发。
📌 3. Spring Boot 的核心优势
✅ 自动配置 —— 无需手动配置 Bean、数据源等,Spring Boot 会智能推断并配置默认值。
✅ 内置服务器 —— 自带 Tomcat、Jetty、Undertow,无需额外安装,直接运行 Spring Boot 应用。
✅ 简化依赖管理 —— 通过 Spring Boot Starter,统一管理 JPA、Security、Redis、Kafka 等常见依赖,避免版本冲突。
✅ 微服务友好 —— 与 Spring Cloud 无缝集成,轻松构建分布式架构。
✅ 强大生态支持 —— 兼容 Spring 全家桶,如 Spring Data JPA、Spring Security、Spring Cloud、Spring Batch 等。
✅ 开箱即用 & 快速开发 —— 通过 Spring Initializr 快速生成项目,极大提升开发效率。
💡 Spring Boot 让 Java 开发更高效、更简单,开启你的 Spring Boot 之旅吧!🚀
2 SpringBoot项⽬创建
2.1使⽤Idea创建
因为我们⽤的Idea社区版(其他版本也同样适⽤),所以先要安装SpringBootHelper插件才能创建 SpringBoot项⽬.
安装SpringBootHelp插件 使⽤专业版Idea的同学不需要安装插件,Idea已经集成了
2.1.1. 查找插件并下载
点击Plugin homepage ,进⼊⽹⻚下载插件
此处不要直接点击 Install 直接点击Install,安装的是收费版(⼟豪请随意)
插件地址:Spring Boot Helper - IntelliJ IDEs Plugin | Marketplace
插件对Idea版本有要求, Idea版本需要在2021.1-2022.1.4范围内,不在这个范围内需要重新卸载安装 卸载要删除注册表的内容
2.1.2 安装插件
按下图序号操作,逐步安装插件
选择刚才下载的插件,安装,重启Idea即可
此时查看已安装插件
安装好之后,它的名字就变成了SpringInitializrandAssistant,如下图所⽰∶
2.1.3 创建SpringBoot项⽬:
File->New->Project
上图说明
① SpringBoot版本,选择任意3.X的,这个版本会随着SpringBoot的升级⽽发⽣变化,不固定 3.X版本使⽤的是jdk17,3.X以下使⽤的是JDK8
②打勾表⽰创建项⽬之初,就引⼊的第三⽅依赖(框架,插件,组件等)
点击Create就完成SpringBoot的项⽬创建了。
注意事项
第⼀次打开SpringBoot项⽬需要加载很久,因为当前SpringBoot框架并没有在⾃⼰的本地仓库. 为了加速SpringBoot项⽬的下载,在打开项⽬之前,请先确认⾃⼰的Maven已经配置为国内源
2.2 ⽹⻚版创建(了解)
不使⽤Idea也可以创建SpringBoot项⽬,我们可以使⽤Spring官⽅提供的⽹⻚版来创建Spring Boot项⽬。 ⽹⻚版创建项⽬先访问:https://start.spring.io/
Idea创建项⽬时,显⽰的界⾯,就是来⾃于这个⽹站,所以⽹络不好的情况下,这个界⾯也会打不开
点击⽣成按钮会下载⼀个SpringBoot的zip包,解压zip之后⽬录如下:
然后再使⽤Idea打开之后,SpringBoot项⽬就算创建成功了.
3.Spring创建完后java目录介绍
SpringBoot项⽬有两个主要的⽬录:
• src/main/java: Java源代码
• src/main/resources:为静态资源或配置⽂件:
•/static:静态资源⽂件夹,⽐如前期学的js,css,html等静态⽂件,不需要服务器数据进⾏绑定的 ⻚⾯
• /templates:模版资源⽂件夹,主要存放动态模板⽂件,⽐如JSP,Freemarker,Thymeleaf等需 要服务器动态渲染数据的⽂件
• src/test/java:测试代码源代码
• target:编译后的⽂件路径
• pom.xml:maven配置⽂件
4 运⾏项⽬
💡 说明: SpringApplication.run(...)
负责启动 Spring Boot 应用,并加载所有自动配置的组件。
Spring Boot 的核心特点之一是 自动配置,它可以根据项目中的依赖,智能推断并自动配置所需的 Spring 组件,避免手动配置繁琐的 XML 或 Java 代码。
📌 核心注解解析
@SpringBootApplication
(核心入口注解):相当于@Configuration
+@EnableAutoConfiguration
+@ComponentScan
的组合。@EnableAutoConfiguration
(开启自动配置):Spring Boot 根据项目依赖自动配置合适的 Bean。@ComponentScan
(组件扫描):默认扫描main
方法所在包及其子包的@Component
、@Service
、@Controller
等组件。
5 开发第一个 Spring Boot Web 应用 🌐
在这一部分,我们将学习如何使用 Spring Boot 创建一个简单的 RESTful API,并实现 HTTP 请求处理、参数校验和异常处理。⽤Spring Boot来实现和浏览器及⽤⼾的交互。
在 Spring Boot 中,创建 RESTful API 非常简单,主要依赖两个注解:
@RestController
:标记为 REST 控制器,返回 JSON 或 XML 数据(无需@ResponseBody
注解)。@GetMapping
、@PostMapping、@PutMapping
、@DeleteMapping`:用于处理 HTTP 请求,分别对应 GET、POST、PUT、DELETE 请求。
示例代码:
重新启动项⽬,访问127.0.0.1:8080/user最终效果如下:
6 Web服务器
浏览器和服务器两端进⾏数据交互,使⽤的就是HTTP协议
前⾯我们已经学习了HTTP协议,知道了HTTP协议就是HTTP客⼾端和HTTP服务器之间的交互数据 的格式.
Web服务器就是对HTTP协议进⾏封装,程序员不需要直接对协议进⾏操作(⾃⼰写代码去解析http协议 规则),让Web开发更加便捷,所以Web服务器也被称为WWW服务器, HTTP服务器,
主要功能是提供⽹ 上信息浏览服务. 常⻅的Web服务器有:Apache,Nginx,IIS,Tomcat,Jboss等 SpringBoot内置了Tomcat服务器,⽆需配置即可直接运⾏
Tocmat默认端⼝号是8080,所以我们程序访问时的端⼝号也是8080
7 请求响应流程分析
浏览器输⼊URL之后,发起请求,就和服务器之间建⽴了连接
浏览器:
• 输⼊⽹址:127.0.0.1:8080/user
◦ 通过IP地址127.0.0.1定位到⽹络上的⼀台计算机,127.0.0.1就是本机
◦ 通过端⼝号8080找到计算机上对应的进程,也就是在本地计算机中找到正在运⾏的8080端⼝的 程序
◦ /user/sayhi是请求资源位置
▪ 资源:对计算机⽽⾔资源就是数据
• web资源:通过⽹络可以访问到的资源(通常是指存放在服务器上的数据) 127.0.0.1:8080/user,就是向本地计算机中的8080端⼝程序,获取资源位置 是/user 的数据 8080端⼝程序,在服务器找/hello位置的资源数据,发给浏览器
服务器:
• 接收到浏览器发送的信息(如:/user/sayhi)
• 在服务器上找到/user/sayhi的资源
• 把资源发送给浏览器
8 🌐 HTTP 错误状态码大全及解释 🚀
在 Web 开发中,服务器返回的 HTTP 状态码用于表示请求的处理结果。4xx(客户端错误)和 5xx(服务器错误) 是访问出错的主要状态码类别。
🔹 1. 客户端错误(4xx)
客户端请求错误,通常是由于请求格式错误、权限问题或资源不存在导致的。
状态码 | 名称 | 解释 |
---|---|---|
400 | Bad Request | 请求参数错误,服务器无法解析请求 |
401 | Unauthorized | 未授权,缺少认证信息(例如未登录) |
402 | Payment Required | 需要付费(通常未使用) |
403 | Forbidden | 服务器拒绝请求(权限不足) |
404 | Not Found | 请求的资源不存在(URL错误或资源被删除) |
405 | Method Not Allowed | 请求的方法(GET、POST等)不被服务器允许 |
406 | Not Acceptable | 服务器无法返回符合 Accept 头部的内容 |
407 | Proxy Authentication Required | 需要通过代理服务器认证 |
408 | Request Timeout | 请求超时,服务器等待请求时长超出限制 |
409 | Conflict | 请求冲突,例如多个用户同时修改同一资源 |
410 | Gone | 资源被永久删除,不再可用 |
411 | Length Required | 服务器要求请求必须指定 Content-Length |
412 | Precondition Failed | 服务器未满足请求头中的条件 |
413 | Payload Too Large | 请求体(POST 数据)过大,服务器拒绝处理 |
414 | URI Too Long | 请求的 URL 过长,无法解析 |
415 | Unsupported Media Type | 服务器不支持请求的媒体格式 |
416 | Range Not Satisfiable | 请求的范围超出了资源的可用范围 |
417 | Expectation Failed | 服务器无法满足 Expect 头部的要求 |
418 | I'm a teapot | 🫖 彩蛋:源自 HTTP 协议的愚人节玩笑 |
421 | Misdirected Request | 请求被发送到错误的服务器 |
422 | Unprocessable Entity | 服务器理解请求,但语义有问题,无法处理 |
423 | Locked | 资源被锁定,无法访问 |
424 | Failed Dependency | 由于前一个请求失败,当前请求无法处理 |
425 | Too Early | 服务器拒绝处理过早的请求 |
426 | Upgrade Required | 服务器要求客户端升级协议 |
428 | Precondition Required | 服务器要求请求必须满足特定条件 |
429 | Too Many Requests | 请求过多(触发速率限制,防止 DDoS) |
431 | Request Header Fields Too Large | 请求头字段过大,服务器拒绝处理 |
451 | Unavailable For Legal Reasons | 资源因法律原因不可用(例如审查内容) |
🔹 2. 服务器错误(5xx)
服务器端错误,通常是服务器无法处理请求或发生内部错误。
状态码 | 名称 | 解释 |
---|---|---|
500 | Internal Server Error | 服务器内部错误,无法处理请求 |
501 | Not Implemented | 服务器不支持请求的方法 |
502 | Bad Gateway | 服务器作为网关或代理,收到无效响应 |
503 | Service Unavailable | 服务器暂时不可用(过载或维护) |
504 | Gateway Timeout | 服务器作为网关,未及时收到响应 |
505 | HTTP Version Not Supported | 服务器不支持 HTTP 请求版本 |
506 | Variant Also Negotiates | 服务器内部错误,导致内容协商失败 |
507 | Insufficient Storage | 服务器存储空间不足,无法处理请求 |
508 | Loop Detected | 服务器检测到死循环,无法继续处理 |
510 | Not Extended | 服务器需要更多信息才能处理请求 |
511 | Network Authentication Required | 需要进行网络认证(如 Wi-Fi 认证页面) |
🔹 3. 处理 HTTP 错误状态码
在 Spring Boot 中,可以通过 @ControllerAdvice
统一处理异常,并返回对应的 HTTP 状态码。
✅ 示例:全局异常处理
@ControllerAdvice
public class GlobalExceptionHandler {// 处理 404 - 资源未找到
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException ex) {
ErrorResponse error = new ErrorResponse(404, "Resource Not Found", ex.getMessage());
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(error);
}// 处理 403 - 权限不足
@ExceptionHandler(AccessDeniedException.class)
public ResponseEntity<ErrorResponse> handleAccessDenied(AccessDeniedException ex) {
ErrorResponse error = new ErrorResponse(403, "Forbidden", "You do not have permission to access this resource.");
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(error);
}// 处理 500 - 服务器内部错误
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleInternalServerError(Exception ex) {
ErrorResponse error = new ErrorResponse(500, "Internal Server Error", "An unexpected error occurred.");
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}
}
✅ 错误响应 JSON
当访问不存在的资源时(返回 404
):
{
"code": 404,
"message": "Resource Not Found",
"details": "User with ID 100 not found"
}
🔹 4. 常见 HTTP 错误及解决方案
错误状态码 | 常见原因 | 解决方案 |
---|---|---|
400(请求错误) | 参数格式错误 | 确保请求参数符合 API 规范 |
401(未授权) | 需要登录或 Token 无效 | 添加身份验证信息 |
403(禁止访问) | 权限不足 | 检查权限配置(Spring Security) |
404(未找到) | 资源不存在 | 确保 URL 正确或返回默认值 |
405(方法不允许) | 发送了不支持的请求方法 | 确保正确使用 GET/POST/PUT/DELETE |
500(服务器错误) | 代码异常 | 检查服务器日志,修复 bug |
502(网关错误) | 代理服务器未正确响应 | 检查上游服务状态 |
503(服务不可用) | 服务器过载或维护中 | 等待恢复或增加服务器资源 |
504(网关超时) | 请求超时 | 优化服务器性能,增加超时时间 |
✅ 总结
4xx(客户端错误):请求有误(400、401、403、404等)。
5xx(服务器错误):服务器处理失败(500、502、503等)。
Spring Boot 可用
@ExceptionHandler
统一处理错误,返回友好的 JSON 响应。了解常见错误原因和解决方案,有助于优化 Web 应用!🚀
🔚 结语:开启高效开发之旅 🚀
Spring Boot 让 Java 开发变得更加简单、高效,从自动配置到内置服务器,极大降低了项目搭建和维护的成本。不论是Web 开发、微服务架构,还是企业级应用,Spring Boot 都能提供强大支持。
掌握 Spring Boot,意味着你能够更快速地构建、部署、优化你的应用。现在,就开启你的 Spring Boot 之旅,让开发变得更加轻松吧!