前言:為什么選擇 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 之旅,讓開發變得更加輕松吧!
?
?