Spring Boot 框架介紹及 Spring Boot 與 Spring 實現對比

在日常 Java Web 開發中,Spring 框架幾乎是繞不開的技術體系。傳統的 Spring 項目因其靈活強大而被廣泛應用,但隨著項目規模擴大與業務復雜度提升,XML 配置繁瑣、部署復雜等問題逐漸顯現。為此,Spring Boot 應運而生。

Spring Boot 作為對 Spring 框架的進一步封裝,不僅大幅簡化了配置與依賴管理,還通過自動化機制提升了開發效率,成為現代企業應用和微服務架構的首選。

本文將圍繞 Spring Boot 的基本概念、優勢特性、項目創建流程,結合具體示例,對比傳統 Spring 與 Spring Boot 項目的實現方式,幫助讀者清晰掌握兩者的核心區別與使用場景。


文章目錄

      • 1、Spring Boot 介紹
        • 1.1、什么是 Spring Boot
        • 1.2、Spring Boot 的核心優勢
        • 1.3、使用 Spring Initializr 創建項目
      • 2、傳統 Spring 項目實現
        • 2.1、配置文件
        • 2.2、Controller 類
      • 3、Spring Boot 項目實現
        • 3.1、項目結構生成方式
        • 3.2、主類入口
        • 3.3、Controller 類
        • 3.4、配置文件
        • 4、Spring VS SpringBoot
        • 4.1、對比總覽
        • 4.2、Maven 依賴對比(核心部分)
        • 4.3、實例對比:登錄接口
        • 4.4、啟動方式對比
      • X、后記


1、Spring Boot 介紹

1.1、什么是 Spring Boot

Spring Boot 是由 Pivotal 團隊 提供的一個全新框架,旨在簡化 Spring 應用的初始化搭建與開發過程。
它基于 Spring 框架,采用約定優于配置的理念,通過自動配置和內嵌服務器,讓開發者可以快速啟動項目并專注于業務邏輯的實現。

Spring Boot 集成了大量常用第三方庫的配置,極大地減少了重復的樣板代碼和復雜配置。

1.2、Spring Boot 的核心優勢

快速搭建項目:

  • 通過 Spring Initializr 工具,開發者可以快速生成項目骨架。
  • 預集成常用依賴(如 Web、數據庫、緩存、安全等),大幅減少手動配置和環境準備時間。

自動配置(Auto Configuration):

  • 根據添加的依賴和類路徑中的內容,Spring Boot 會智能推斷并完成配置。
  • 開發者無需顯式定義 Bean 或 XML,大量默認配置可直接使用。

內嵌式服務器:

  • 支持內嵌的 Tomcat、Jetty、Undertow,無需單獨部署 Web 服務器。
  • 可以通過 main() 方法直接啟動應用,極大簡化開發和測試流程。

生產就緒(Production Ready):

  • 提供如健康檢查(Health Check)、應用指標(Metrics)、日志追蹤等功能。
  • 與 Spring Boot Actuator 集成后,便于監控和運維支持。
1.3、使用 Spring Initializr 創建項目

以下是通過 Spring Initializr 創建一個簡單 Spring Boot 項目的步驟:

打開 Spring Initializr

訪問地址:https://start.spring.io

填寫項目信息

  • 選擇構建工具:Maven 或 Gradle
  • 選擇開發語言:Java、Kotlin 或 Groovy
  • 選擇 Spring Boot 版本(建議使用穩定版)

添加項目依賴

例如:

  • Spring Web:用于構建 RESTful API 或 Web 應用
  • Spring Boot DevTools:支持熱部署
  • Lombok:簡化 Java Bean 編寫
  • Spring Data JPA:操作數據庫

生成項目

  • 點擊 “Generate” 按鈕,下載項目壓縮包
  • 解壓后導入到 IDE(如 IntelliJ IDEA、Eclipse)中,即可開始開發

2、傳統 Spring 項目實現

2.1、配置文件

配置文件(applicationContext.xml):

<context:component-scan base-package="com.example"/>
<context:annotation-config/>

配置文件(web.xml):

<web-app><context-param name="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/dispatcher-servlet.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
2.2、Controller 類
@Controller
public class LoginController {@RequestMapping(value = "/login", method = RequestMethod.POST)@ResponseBodypublic String login(@RequestParam String username, @RequestParam String password) {if ("admin".equals(username) && "123".equals(password)) {return "Login success";}return "Login failed";}
}

3、Spring Boot 項目實現

3.1、項目結構生成方式

使用 Spring Initializr 快速生成項目,勾選 Web 模塊。

3.2、主類入口

主類入口(Application.java):

@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
3.3、Controller 類
@RestController
public class LoginController {@PostMapping("/login")public String login(@RequestParam String username, @RequestParam String password) {if ("admin".equals(username) && "123".equals(password)) {return "Login success";}return "Login failed";}
}
3.4、配置文件

配置文件(application.properties):

server.port=8080

4、Spring VS SpringBoot

從上面的用例可以看到,傳統 Spring 項目與 Spring Boot 項目在配置方式、啟動方式、開發效率等方面存在顯著差異。

傳統 Spring 項目依賴 XML 配置(如 web.xmlapplicationContext.xml),啟動需部署至外部 Web 容器,如 Tomcat,項目結構較為復雜,依賴管理手動繁瑣。

而 Spring Boot 項目強調 “約定優于配置”,通過注解和自動配置簡化開發流程,內嵌容器支持一鍵啟動,依賴通過 starter 管理統一引入,極大提升開發效率和維護性。

兩者在功能上可以實現相同目標,但 Spring Boot 更適合現代微服務和敏捷開發場景。

4.1、對比總覽

image-20250417114230864

4.2、Maven 依賴對比(核心部分)

Spring(還需引入 javax.servlet-api,Jackson、日志等依賴(手動)):

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.32</version>
</dependency>

Spring Boot(自動帶上:Tomcat、Jackson、日志、異常處理、JSON 序列化等):

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version>
</parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
4.3、實例對比:登錄接口

傳統 Spring Controller(需要搭配:web.xml 配置 DispatcherServletapplicationContext.xml 配置組件掃描):

@Controller
public class LoginController {@RequestMapping(value = "/login", method = RequestMethod.POST)@ResponseBodypublic String login(@RequestParam String username, @RequestParam String password) {return "admin".equals(username) && "123".equals(password) ? "Login success" : "Login failed";}
}

Spring Boot Controller(無需額外配置,直接運行,路徑自動映射,開發體驗極佳):

@RestController
public class LoginController {@PostMapping("/login")public String login(@RequestParam String username, @RequestParam String password) {return "admin".equals(username) && "123".equals(password) ? "Login success" : "Login failed";}
}
4.4、啟動方式對比

Spring:沒有 main() 方法。啟動依賴 Tomcat,必須通過 war 包部署

啟動流程:

Tomcat -> 讀取 web.xml -> 初始化 DispatcherServlet -> 讀取 applicationContext.xml -> 啟動

Spring Boot:直接運行 main 方法

@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

X、后記

通過本篇文檔的學習,相信你已經對 Spring Boot 的框架特性與傳統 Spring 項目的差異有了系統認識。Spring Boot 不是對 Spring 的替代,而是在其之上提供了更高層次的封裝與工程化支持,使得項目開發更快速、配置更簡潔、部署更方便。

在微服務化、云原生架構日益流行的今天,掌握 Spring Boot 已成為 Java 開發者的重要技能之一。希望本文所提供的對比與實戰內容,能為你在項目選型和技術演進中提供有力參考。

如果你想進一步深入,可以繼續探索 Spring Boot 與 Spring Cloud 的整合、Spring Boot 的 Actuator、自動化測試、安全模塊等內容,挖掘更多實用功能與最佳實踐。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77859.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77859.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77859.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于CNN卷積神經網絡和GEI步態能量提取的視頻人物步態識別算法matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 4.1 GEI步態能量提取 4.2 CNN卷積神經網絡原理 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) 2.算法運行軟件版本 matlab2024b/matlab2022a 3.部分核心程序 &…

創建型模式:建造者模式

什么是建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一種創建型設計模式&#xff0c;它將一個復雜對象的構建過程與其表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。簡單來說&#xff0c;建造者模式允許您一步一步創建復雜對象&#xff0c;而…

Linux `init 5` 相關命令的完整使用指南

Linux init 5 相關命令的完整使用指南—目錄 一、init 系統簡介二、init 5 的含義與作用三、不同 Init 系統下的 init 5 行為1. SysVinit&#xff08;如 CentOS 6、Debian 7&#xff09;2. systemd&#xff08;如 CentOS 7、Ubuntu 16.04&#xff09;3. Upstart&#xff08;如 …

RabbitMQ常見面試題回答重點

文章目錄 什么是消息隊列&#xff1f;為什么需要消息隊列消息隊列的模型消息隊列常見名詞如何保證消息不丟失&#xff1f;&#xff08;可靠性&#xff09;如何保證消息不重復/業務冪等性如何保證消息有序性如何處理消息堆積消息隊列設計為推送還是拉取 / 推拉模式優點無法路由的…

欣佰特攜數十款機器人相關前沿產品,亮相第二屆人形機器人和具身智能行業盛會

2025年4月15日至16日&#xff0c;備受關注的第二屆中國人形機器人與具身智能產業大會已在北京成功舉行。作為國內前沿科技及產品服務領域的重要參與者&#xff0c;欣佰特科技攜眾多前沿產品精彩亮相&#xff0c;全方位展示了其在人形機器人與具身智能領域的創新產品。 在本次大…

Docker安裝 (centos)

1.安裝依賴包&#xff1a; sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2.刪除已有的 Docker 倉庫文件&#xff08;如果有&#xff09;&#xff1a; sudo rm -f /etc/yum.repos.d/docker-ce.repo 3.添加阿里云的 Docker 倉庫&#xff1a; sudo yum…

Vue接口平臺學習十——接口用例頁面2

效果圖及簡單說明 左邊選擇用例&#xff0c;右側就顯示該用例的詳細信息。 使用el-collapse折疊組件&#xff0c;將請求到的用例詳情數據展示到頁面中。 所有數據內容&#xff0c;綁定到caseData中 // 頁面綁定的用例編輯數據 const caseData reactive({title: "",…

服務器數據遷移指南

服務器數據遷移是將數據從一臺服務器轉移到另一臺服務器的過程&#xff0c;可能是為了硬件升級、云遷移、數據中心搬遷或服務整合。 以下是數據遷移的關鍵步驟和注意事項&#xff1a; 遷移前準備 制定遷移計劃 確定遷移范圍(全量/增量) 評估數據量和網絡帶寬 制定時間表和回…

25.解決中醫知識問答刪除歷史對話功能后端處理請求時拋出異常

ChatTest.vue:176 DELETE http://localhost:8080/api/chat/conversations/20 500 (Internal Server Error) deleteConversation ChatTest.vue:176 onClick ChatTest.vue:22 ChatTest.vue:185 刪除失敗 AxiosError {message: Request failed with status code 500, name: Axio…

記錄seatunnel排查重復數據的案例分析

文章目錄 背景分析檢查現象檢查B集群是否有異常&#xff0c;導致重復消費的分析同步任務 修復問題發現flink job 一直報異常修復問題 背景 使用seatunnel 同步數據從A 集群kafka 同步到B集群kafka,現象是發現兩邊數據不一致&#xff0c;每天10w級別會多幾十條數據 分析 檢查…

VSCode遠程圖形化GDB

VSCode遠程圖形化GDB 摘要一、安裝VSCode1、使用.exe安裝包安裝VSCode2、VSCode 插件安裝3、VSCode建立遠程連接 二、core dump找bug1、開啟core文件2、永久生效的方法3、編寫測試程序4、運行結果5、查看core段錯誤位置6、在程序中開啟core dump并二者core文件大小 三、gdbserv…

Android 中實現 GIF 圖片動畫

在 Android 中&#xff0c;ImageView 從 Android 9.0&#xff08;API 級別 28&#xff09; 開始原生支持 GIF 動畫&#xff0c;通過 AnimatedImageDrawable 類實現。在之前的版本中&#xff0c;ImageView 并不支持直接播放 GIF 動畫&#xff0c;只能顯示 GIF 的第一幀。 一、 …

【c語言】指針進階

目錄 1.字符指針 2.指針數組 3.數組指針 3.1 數組指針的定義 3.2 數組指針的使用 4.數組參數&#xff0c;指針參數 4.1 一維數組傳參 4.2 二維數組傳參 4.3 一級指針傳參 4.4 二級指針傳參 5.函數指針 6.函數指針數組 6.1函數指針數組的定義 6.2 函數指針數組…

極狐GitLab 項目 API 的速率限制如何設置?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 項目 API 的速率限制 (BASIC SELF) 引入于 15.10 版本&#xff0c;功能標志為rate_limit_for_unauthenticated_projects_api_…

【xlog日志文件】怎么刪除里面包含某些字符串的行(使用excel)

將log日志,復制到單獨一行 B列&#xff08;可能一行很長&#xff0c;所以將整合后的放在A列&#xff09; 使用公式可以篩選出 包含某些字符串的行 為true&#xff0c;將這些行直接刪除 IF(COUNT(FIND("MediaMuxterThreadRussia",B2,1))>0,"包含",&quo…

STM32提高篇: CAN通訊

STM32提高篇: CAN通訊 一.CAN通訊介紹1.物理層2.協議層二.STM32CAN外設1.CAN控制器的3種工作模式2.CAN控制器的3種測試模式3.功能框圖三.CAN的寄存器介紹1.環回靜默模式測試2.雙擊互發測試四.CAN的HAL代碼解讀一.CAN通訊介紹 CAN(Controller Area Network 控制器局域網,簡稱…

Java寫數據結構:棧

1.概念&#xff1a; 一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端稱為棧底。棧中的數據元素遵守后進先出LIFO&#xff08;Last In First Out&#xff09;的原則。 壓棧&#xff1a;棧的插…

單頁面應用的特點,什么是路由,VueRouter的下載,安裝和使用,路由的封裝抽離,聲明式導航的介紹和使用

文章目錄 一.什么是單頁面應用?二.什么是路由?生活中的路由和Vue中的路由 三.VueRouter(重點)0.引出1.介紹2.下載與使用(5個基本步驟2個核心步驟)2.1 五個基本步驟2.2 兩個核心步驟 四.路由的封裝抽離五.聲明式導航1.導航鏈接特點一:能跳轉特點二:能高亮 2.兩個高亮類名2.1.區…

【C++】模板2.0

最近學習了一些模板的知識&#xff0c;速寫本博客作為學習筆記&#xff0c;若有興趣&#xff0c;歡迎垂閱讀&#xff01; 1.非類型模板參數 模板參數分類類型形參與非類型形參。 類型形參即&#xff1a;出現在模板參數列表中&#xff0c;跟在class或者typename之類的參數類型名…

目標檢測中的損失函數(二) | BIoU RIoU α-IoU

BIoU來自發表在2018年CVPR上的文章&#xff1a;《Improving Object Localization With Fitness NMS and Bounded IoU Loss》 論文針對現有目標檢測方法只關注“足夠好”的定位&#xff0c;而非“最優”的框&#xff0c;提出了一種考慮定位質量的NMS策略和BIoU loss。 這里不贅…