Spring Boot詳解:深入了解與實踐

文章目錄

    • 1. Spring Boot簡介
      • 1.1 什么是Spring Boot?
      • 1.2 Spring Boot的歷史背景
      • 1.3 Spring Boot的核心特點
    • 2. Spring Boot的核心概念
      • 2.1 自動配置
        • 2.1.1 自動配置原理
        • 2.1.2 自定義配置
      • 2.2 Spring Boot Starter
      • 2.3 Spring Boot CLI
    • 3. Spring Boot的主要功能模塊
      • 3.1 Web開發
        • 3.1.1 Spring MVC
        • 3.1.2 嵌入式服務器
      • 3.2 數據訪問
        • 3.2.1 Spring Data JPA
        • 3.2.2 數據庫配置
      • 3.3 安全管理
        • 3.3.1 基本安全配置
      • 3.4 測試支持
        • 3.4.1 單元測試
        • 3.4.2 集成測試
    • 4. Spring Boot實戰案例
      • 4.1 創建一個簡單的RESTful API
        • 4.1.1 項目結構
        • 4.1.2 代碼實現
        • 4.1.3 配置文件
    • 5. 總結

在這里插入圖片描述

Spring Boot是Spring生態系統中的重要組成部分,它極大地簡化了Spring應用的開發和配置。本文將詳細介紹Spring Boot的核心概念、關鍵特性及其在實際開發中的應用,幫助讀者全面掌握Spring Boot的使用。

1. Spring Boot簡介

1.1 什么是Spring Boot?

Spring Boot是由Pivotal團隊開發的基于Spring框架的項目,旨在簡化新Spring應用的初始搭建及開發過程。通過提供一系列默認配置和自動化功能,Spring Boot可以大幅減少配置文件的數量和復雜度,使開發者能夠專注于業務邏輯的實現。

1.2 Spring Boot的歷史背景

Spring Boot最早于2014年發布,其設計初衷是為了應對復雜的企業級應用開發中頻繁出現的配置冗余和重復代碼問題。通過Spring Boot,開發者可以更快地啟動一個新項目,并迅速進入實際開發階段。

1.3 Spring Boot的核心特點

  • 自動配置:Spring Boot自動配置機制能根據類路徑中的依賴和環境,自動配置Spring應用程序。
  • 獨立運行:Spring Boot應用可以打包成JAR文件并獨立運行,不依賴外部的應用服務器。
  • 生產就緒:內置的監控、健康檢查及外部配置功能,使應用能夠在生產環境中平穩運行。
  • 簡化的依賴管理:通過Spring Boot Starter簡化依賴管理和版本控制。

2. Spring Boot的核心概念

2.1 自動配置

自動配置是Spring Boot的核心特性之一。它通過@EnableAutoConfiguration注解實現,根據類路徑中的依賴自動配置合適的Spring組件。

2.1.1 自動配置原理

Spring Boot的自動配置通過掃描META-INF/spring.factories文件,加載其中定義的自動配置類。每個自動配置類都會根據一定的條件(如類路徑中是否存在特定的類或Bean)來決定是否生效。

2.1.2 自定義配置

雖然自動配置為開發者提供了極大的便利,但有時需要自定義配置以滿足特定需求。可以通過以下幾種方式進行自定義配置:

  • 配置屬性:在application.propertiesapplication.yml文件中配置屬性。
  • 配置類:創建配置類并使用@Configuration注解。
  • 排除自動配置:通過@SpringBootApplication(exclude = ...)注解排除特定的自動配置類。

2.2 Spring Boot Starter

Spring Boot Starter是Spring Boot提供的依賴管理機制,通過預定義的一組依賴,簡化項目中的依賴管理。例如,spring-boot-starter-web包含了開發Web應用所需的所有基本依賴。

2.3 Spring Boot CLI

Spring Boot CLI(命令行界面)是一個用于快速創建、運行和測試Spring Boot應用的工具。通過Spring Boot CLI,開發者可以使用Groovy腳本快速搭建Spring Boot應用。

3. Spring Boot的主要功能模塊

3.1 Web開發

Spring Boot通過spring-boot-starter-web提供了簡便的Web開發支持。這個Starter包括Spring MVC、Jackson和Tomcat(默認嵌入式容器)。

3.1.1 Spring MVC

Spring MVC是Spring框架的核心Web模塊,支持創建基于注解的Web應用。通過Spring Boot,開發者可以輕松配置和使用Spring MVC。

示例:

@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";}
}
3.1.2 嵌入式服務器

Spring Boot默認使用Tomcat作為嵌入式服務器,但也支持Jetty和Undertow。嵌入式服務器使應用可以打包成JAR文件,并通過簡單的命令運行:

java -jar myapp.jar

3.2 數據訪問

Spring Boot提供了一整套便捷的數據訪問解決方案,包括Spring Data JPA、JDBC和Redis等。

3.2.1 Spring Data JPA

Spring Data JPA通過spring-boot-starter-data-jpa簡化了JPA的使用。只需簡單配置即可連接數據庫并進行CRUD操作。

示例:

@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;// getters and setters
}public interface UserRepository extends JpaRepository<User, Long> {
}
3.2.2 數據庫配置

application.properties中配置數據庫連接信息:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update

3.3 安全管理

Spring Boot通過spring-boot-starter-security提供了Spring Security的默認配置,使應用能夠輕松實現認證和授權功能。

3.3.1 基本安全配置

默認情況下,Spring Security會保護所有的HTTP端點,需要用戶進行身份驗證。可以通過自定義配置類來調整安全設置:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().and().httpBasic();}
}

3.4 測試支持

Spring Boot提供了強大的測試支持,包括單元測試和集成測試工具。

3.4.1 單元測試

使用@SpringBootTest注解,可以方便地加載Spring應用上下文進行測試:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {@Autowiredprivate MockMvc mockMvc;@Testpublic void testHelloEndpoint() throws Exception {mockMvc.perform(get("/hello")).andExpect(status().isOk()).andExpect(content().string("Hello, Spring Boot!"));}
}
3.4.2 集成測試

Spring Boot集成測試可以測試應用的整個運行環境,包括數據庫連接和Web服務器:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyApplicationTests {@LocalServerPortprivate int port;@Testpublic void testHomePage() throws Exception {URL url = new URL("http://localhost:" + port + "/");HttpURLConnection connection = (HttpURLConnection) url.openConnection();assertEquals(200, connection.getResponseCode());}
}

4. Spring Boot實戰案例

4.1 創建一個簡單的RESTful API

4.1.1 項目結構
src└── main├── java│   └── com.example.demo│       ├── DemoApplication.java│       ├── controller│       │   └── UserController.java│       ├── model│       │   └── User.java│       └── repository│           └── UserRepository.java└── resources└── application.properties
4.1.2 代碼實現

DemoApplication.java

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

User.java

@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;// getters and setters
}

UserRepository.java

public interface UserRepository extends JpaRepository<User, Long> {
}

UserController.java

@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserRepository userRepository;@GetMappingpublic List<User> getAllUsers() {return userRepository.findAll();}@PostMappingpublic User createUser(@RequestBody User user) {return userRepository.save(user);}@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {return userRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found"));}@PutMapping("/{id}")public User updateUser(@PathVariable Long id, @RequestBody User userDetails) {User user = userRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found"));user.setName(userDetails.getName());user.setEmail(userDetails.getEmail());return userRepository.save(user);}@DeleteMapping("/{id}")public ResponseEntity<?> deleteUser(@PathVariable Long id) {User user = userRepository.findById(id).orElseThrow(()-> new ResourceNotFoundException("User not found"));userRepository.delete(user);return ResponseEntity.ok().build();}
}
4.1.3 配置文件

application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update

5. 總結

Spring Boot通過提供自動配置、簡化依賴管理和獨立運行等特性,大大提高了開發效率,使得構建和部署Spring應用變得更加簡單。本文介紹了Spring Boot的核心概念和主要功能模塊,并通過一個簡單的RESTful API示例展示了Spring Boot的實際應用。掌握Spring Boot的使用,不僅可以提升開發效率,還能更好地應對復雜的企業級應用開發需求。

Spring Boot的生態系統仍在不斷發展和完善,未來的版本將引入更多新特性和改進。通過不斷學習和實踐,開發者可以充分利用Spring Boot的優勢,構建高質量的Java應用程序。

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

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

相關文章

網橋、路由器和網關有什么區別

在計算機網絡領域&#xff0c;網橋、路由器和網關都是常見的網絡設備&#xff0c;它們在網絡通信中扮演著不同的角色。雖然它們都有連接不同網絡的功能&#xff0c;但在實際應用中卻具有各自獨特的作用和特點。 1.網橋&#xff08;Bridge&#xff09; 定義&#xff1a;網橋是…

最佳 Mac 數據恢復:恢復 Mac 上已刪除的文件

嘗試過許多 Mac 數據恢復工具&#xff0c;但發現沒有一款能達到宣傳的效果&#xff1f;我們重點介紹最好的 Mac 數據恢復軟件 沒有 Mac 用戶愿意擔心數據丟失&#xff0c;但您永遠不知道什么時候會發生這種情況。無論是意外刪除 Mac 上的重要文件、不小心弄濕了 Mac、感染病毒…

CSS:list-style作用

list-style作用 介紹屬性1. list-style-type2.list-style-image3.list-style-position 常見用法1.設置列表項標記類型2.設置列表項標記圖像3.設置列表項標記位置4.組合使用5.為不同列表項設置不同的樣式6.重置列表樣式 示例 介紹 在Web開發中&#xff0c;list-style 是CSS的一…

ORACLE 查詢SQL優化

1 使用EXPLAIN PLAN 使用EXPLAIN PLAN查看查詢的執行計劃&#xff0c;這可以幫助你理解查詢是如何被Oracle執行的。基于執行計劃&#xff0c;你可以確定是否存在索引缺失、不必要的全表掃描等問題。 以下是幾種使用EXPLAIN PLAN的方法&#xff1a; 使用EXPLAIN PLAN FOR: 你可以…

【Epoch,Batch,Iteration】深度學習模型訓練相關基礎概念光速理解!

&#x1f525;模型訓練相關基礎概念&#xff01; Epoch: 一次 epoch 代表整個訓練數據集已經被完整地送入神經網絡進行了一輪訓練。通常&#xff0c;模型需要多次 epoch 才能充分學習數據集中的模式。Batch: 由于數據集可能過大&#xff0c;無法一次性全部加載到內存中進行訓練…

解決VSCode右鍵沒有Open In Default Browser問題

在VSCode進行Web小程序測試時&#xff0c;我們在新建的HTML文件中輸入 !會自動生成頁面代碼骨架&#xff0c;寫入內容后&#xff0c;我們想要右鍵在瀏覽器中預覽。發現右鍵沒有“Open In Default Browser”選項。原因是沒有安裝插件。 下面是解決方案&#xff1a;首先在VSCode找…

探索Lora:微調大型語言模型和擴散模型的低秩適配方法【原理解析,清晰簡潔易懂!附代碼】

探索Lora&#xff1a;微調大型語言模型和擴散模型的低秩適配方法 隨著深度學習技術的快速發展&#xff0c;大型語言模型&#xff08;LLMs&#xff09;和擴散模型&#xff08;Diffusion Models&#xff09;在自然語言處理和計算機視覺領域取得了顯著的成果。然而&#xff0c;這…

3d渲染的常用概念和技術,渲染100邀請碼1a12

之前我們介紹了3D渲染的基本原理和流程&#xff0c;這次說下幾個常用概念和技術。 3D渲染中涉及到很多專業的概念和技術&#xff0c;它們決定了渲染質量和效果&#xff0c;常用的有以下幾個。1、光線追蹤 光線追蹤是一些專業渲染器&#xff08;如V-Ray和Corona等&#xff09;…

Android UI控件詳細解析(四)

1.UI控件 1.1 TextView控件 常用屬性 屬性含義id給當前控件定義了一個唯 一標識符layout_width高度&#xff0c;單位&#xff1a;dp (wrap_content, match_parent)layout_height寬度&#xff0c;單位&#xff1a;dp (wrap_content, match_parent)background設置背景圖片text…

Django學習一:創建Django框架,介紹Django的項目結構和開發邏輯。創建應用,編寫主包和應用中的helloworld

文章目錄 前言一、Django環境配置1、python 環境2、Django環境3、mysql環境4、IDE&#xff1a;pycharm 二、第一次創建Django項目1、創建項目door_web_django_system2、運行啟動 三、Django項目介紹1、介紹Django項目結構2、第一個helloword4、django的項目邏輯&#xff08;和j…

React + Taro 項目 實際書寫 感受

之前我總結了部分react 基礎 根據官網的內容 以及Taro 框架的內容 今天我試著開始寫了一下頁面和開發 說一下我的感受 我之前寫的是vue3 今天是第一次真正根據需求做頁面開發 和邏輯功能 代碼的書寫 主體就是開發了這個頁面 雖說這個頁面 很簡單 但是如果你要是第一次寫 難說…

CATIA入門操作案例——壓縮彈簧繪制,螺旋線的使用,法則曲線應用

目錄 引出畫壓縮彈簧畫等距部分畫兩端的壓縮部分曲線縫合和掃掠封閉曲面得實體 總結異形彈簧新建幾何體草圖編輯&#xff0c;畫一條樣條線進行掃掠&#xff0c;圓心和半徑畫出曲面上的螺旋線再次選擇掃掠&#xff0c;圓心和半徑 其他自定義信號和槽1.自定義信號2.自定義槽3.建立…

Aigtek功率放大器的主要性能要求有哪些

功率放大器是電子系統中的重要組件&#xff0c;用于將低功率信號放大到高功率水平。功率放大器的性能直接影響到信號的放大質量和系統的整體性能。下面西安安泰將介紹功率放大器的主要性能要求。 增益&#xff1a;功率放大器應當具有足夠的增益&#xff0c;即將輸入信號的幅度放…

【仿真建模-anylogic】指定服務端口

Author&#xff1a;趙志乾 Date&#xff1a;2024-05-31 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 問題&#xff1a;anylogic動畫模型可以在瀏覽器中進行展示&#xff0c;且訪問端口在模型啟動時隨機生成&#xff1b;為了將其動畫頁面嵌…

讀取YUV數據到AVFrame并用多線程控制幀率

文件樹&#xff1a; 1.xvideo_view.h class XVideoView { public:// 像素格式枚舉enum Format { RGBA 0, ARGB, YUV420P };// 渲染類型枚舉enum RenderType { SDL 0 };// 創建渲染對象的靜態方法static XVideoView* Create(RenderType type SDL);// 繪制幀的方法bool DrawF…

影響生產RAG流水線5大瓶頸

檢索增強生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;已成為基于大型語言模型的生成式人工智能應用的關鍵組成部分。其主要目標是通過將通用語言模型與外部信息檢索系統集成&#xff0c;增強通用語言模型的能力。這種混合方法旨在解決傳統語言模…

無法刪除dll文件

碰到xxxxxx.dll文件無法刪除不要慌&#xff01; 通過Tasklist /m dll文件名稱 去查看它和哪個系統文件綁定運行&#xff0c;發現是explorer.exe。 我們如果直接通過del命令【當然需要在該dll文件所在的路徑中】。發現拒絕訪問 我們需要在任務管理器中&#xff0c;將資源管理器…

如何處理網安發出的網絡安全監督檢查限期整改通知

近期&#xff0c;很多客戶都收到了網安發出的限期整改通知。大家都比較關心的問題是&#xff0c;如何應對處理這些限期整改通知。后續是否有其他的影響&#xff0c;需要如何做進一步的優化整改和調整。今天就這些問題給大家做一些分享。 一. 為什么會有網安的網絡安全檢查 主…

大多數JAVA程序員都干不到35歲嗎?

在開始前剛好我有一些資料&#xff0c;是我根據網友給的問題精心整理了一份「 Java的資料從專業入門到高級教程」&#xff0c; 點個關注在評論區回復“888”之后私信回復“888”&#xff0c;全部無償共享給大家&#xff01;&#xff01;&#xff01;不少人認為的程序員吃青春飯…

邊緣計算:推動智能時代的前沿技術

邊緣計算:推動智能時代的前沿技術 引言 隨著物聯網(IoT)、5G通信和人工智能(AI)技術的迅猛發展,邊緣計算(Edge Computing)成為現代計算架構中的一個重要組成部分。邊緣計算通過將數據處理和存儲移至網絡邊緣,靠近數據生成源頭,從而顯著提高響應速度、降低延遲和帶寬…