Spring Boot 約定大于配置:實現自定義配置

文章目錄

  • Spring Boot 約定大于配置:實現自定義配置
    • 引言
    • 1. Spring Boot 的約定大于配置
    • 2. 自定義配置的需求
    • 3. 實現自定義配置的步驟
    • 4. 示例:自定義 Spring MVC 配置
      • 4.1 創建自定義配置類
      • 4.2 創建自定義攔截器
      • 4.3 測試自定義配置
    • 5. 其他自定義配置場景
      • 5.1 自定義數據源配置
      • 5.2 自定義 Spring Security 配置
    • 6. 總結


Spring Boot 約定大于配置:實現自定義配置

引言

Spring Boot 是一個基于 Spring 框架的快速開發框架,它的核心理念之一是 “約定大于配置”。這意味著 Spring Boot 提供了許多默認配置,開發者只需要關注自己的業務邏輯,而不需要手動配置大量的細節。然而,在某些情況下,我們可能需要自定義配置來滿足特定的需求。本文將介紹如何在 Spring Boot 中實現自定義配置,并通過實現接口和添加 @Configuration 注解來完成這一過程。


1. Spring Boot 的約定大于配置

Spring Boot 的“約定大于配置”理念體現在以下幾個方面:

  • 自動配置:Spring Boot 根據項目的依賴自動配置應用程序。例如,如果項目中引入了 spring-boot-starter-web,Spring Boot 會自動配置 Tomcat 和 Spring MVC。
  • 默認配置:Spring Boot 提供了許多默認配置,例如默認的端口號是 8080,默認的靜態資源路徑是 classpath:/static 等。
  • 簡化配置:通過 application.propertiesapplication.yml 文件,開發者可以輕松覆蓋默認配置。

這種設計大大減少了開發者的配置工作量,使得開發者可以更專注于業務邏輯的實現。


2. 自定義配置的需求

盡管 Spring Boot 提供了許多默認配置,但在實際開發中,我們可能需要自定義一些配置。例如:

  • 自定義 Bean 的加載順序。
  • 自定義某些組件的初始化邏輯。
  • 根據環境變量動態加載配置。

為了實現這些需求,Spring Boot 提供了靈活的擴展機制,允許開發者通過實現接口和添加注解來自定義配置。


3. 實現自定義配置的步驟

在 Spring Boot 中,實現自定義配置通常需要以下步驟:

  1. 實現 WebMvcConfigurer 或其他相關接口:根據需求選擇合適的接口。
  2. 添加 @Configuration 注解:將自定義配置類標記為 Spring 的配置類。
  3. 重寫接口方法:在配置類中重寫接口的方法,實現自定義邏輯。

下面通過一個具體的示例來演示如何實現自定義配置。


4. 示例:自定義 Spring MVC 配置

假設我們需要自定義 Spring MVC 的配置,例如添加一個攔截器或修改靜態資源路徑。可以通過以下步驟實現:

4.1 創建自定義配置類

首先,創建一個類并實現 WebMvcConfigurer 接口。WebMvcConfigurer 是 Spring MVC 提供的接口,用于自定義 MVC 配置。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration // 標記為配置類
public class CustomWebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 添加自定義攔截器registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/**"); // 攔截所有請求}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 自定義靜態資源路徑registry.addResourceHandler("/static/**").addResourceLocations("classpath:/custom-static/");}
}

4.2 創建自定義攔截器

在上面的配置類中,我們添加了一個自定義攔截器。攔截器的實現如下:

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Component
public class CustomInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("CustomInterceptor: 請求被攔截");return true; // 繼續執行后續邏輯}
}

4.3 測試自定義配置

啟動 Spring Boot 應用程序后,訪問任意路徑,控制臺會輸出 CustomInterceptor: 請求被攔截,說明攔截器已生效。同時,靜態資源路徑也會被映射到 classpath:/custom-static/


5. 其他自定義配置場景

除了自定義 Spring MVC 配置外,Spring Boot 還支持許多其他自定義配置場景。以下是一些常見的示例:

5.1 自定義數據源配置

通過實現 DataSourceInitializer 接口,可以自定義數據源的初始化邏輯。

import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;@Configuration
public class CustomDataSourceConfig {@Beanpublic DataSource dataSource() {// 自定義數據源配置return new HikariDataSource();}
}

5.2 自定義 Spring Security 配置

通過繼承 WebSecurityConfigurerAdapter 類,可以自定義 Spring Security 的配置。

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
@EnableWebSecurity
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated();}
}

6. 總結

Spring Boot 的“約定大于配置”理念極大地簡化了開發流程,但在實際項目中,我們仍然需要根據需求自定義配置。通過實現相關接口(如 WebMvcConfigurer)并添加 @Configuration 注解,開發者可以靈活地擴展和定制 Spring Boot 的默認行為。

自定義配置的核心步驟如下:

  1. 選擇合適的接口(如 WebMvcConfigurer)。
  2. 創建配置類并添加 @Configuration 注解。
  3. 重寫接口方法,實現自定義邏輯。

希望本文能幫助你更好地理解 Spring Boot 的自定義配置機制,并在實際項目中靈活運用!

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

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

相關文章

交易系統優化方案

證券交易系統優化方案 一、選股策略體系 (一)擇時策略矩陣 尾盤集中篩選法(14:30后)聚焦量價異動個股,捕捉次日溢價機會早盤轉債套利法(9:25-10:00)通過可轉債與正股聯動性捕捉日內機會龍頭戰法(全時段)行業板塊強度排序,鎖定前三大市值龍頭容量資金戰法(中盤股適用…

在線Doc/Docx轉換為PDF格式 超快速轉換的一款辦公軟件 文檔快速轉換 在線轉換免費轉換辦公軟件

小白工具https://www.xiaobaitool.net/files/word-pdf/提供了一項非常實用的在線服務——將Doc或Docx格式的文檔快速轉換為PDF格式。這項服務不僅操作簡單,而且轉換效率高,非常適合需要頻繁處理文檔轉換的用戶。 服務特點: 批量轉換&#x…

java學習總結(四)MyBatis多表

一、多表結構 學生表、班級表、課程表、班級課程表 二、一對一 一個學生只屬于一個班級。 查詢:id name age gender banjiName SELECT s.id,s.name,s.age,s.gender,b.id AS banjiId,b.name AS banjiName FROM student AS s INNER JOIN banji AS b ON s.banji_id…

大語言模型學習及復習筆記(1)語言模型的發展歷程

1.大模型進入人們視野 ChatGPT 于2022年11月底上線 模型名稱 發布時間 核心突破 GPT-3 2020年6月 首款千億參數模型,少樣本學習 GPT-3.5-Turbo 2022年11月 對話能力優化,用戶級應用落地 GPT-4 2023年3月 多模態、強邏輯推理 GPT-4o / GPT-4…

【NLP】 3. Distributional Similarity in NLP(分布式相似性)

Distributional Similarity in NLP(分布式相似性) 分布式相似性(Distributional Similarity) 是自然語言處理(NLP)中的核心概念,基于“相似的單詞出現在相似的上下文中”這一假設。它用于衡量單…

【C#學習】協程等待

來源GPT,僅記錄學習 yield return WaitForEndOfFrame() 適用于 渲染結束后再執行代碼,但 WebGL 可能不適合這個操作,會拖慢幀率。(渲染得太慢) yield return null; 讓代碼在下一幀的 Update() 里繼續運行,更加流暢。 …

【項目】負載均衡式在線OJ

負載均衡式在線OJ 目錄 負載均衡式在線OJ 1.項目介紹: 2.comm 2.1 log.hpp 日志等級 開放式日志 時間戳工具 2.2 util.hpp TimeUtil類 PathUtil類 FileUtil類 StringUtil類 3.Compile_server 3.1compile_run.hpp RemoveTempFile CodeToDesc Start 3.…

實現“XXX一張圖“進行環境設施設備可視化管理

實現“電網一張圖”、“鐵路一張圖”、“水庫一張圖”、“森林一張圖”等概念,本質上是將某一領域的空間數據、設施設備、運行狀態等信息整合到一個統一的數字化平臺上,實現全域可視化、智能化管理和協同運營。這種“一張圖”模式依賴于地理信息系統(GIS)、物聯網(IoT)、…

《基於Python的網絡爬蟲抓包技術研究與應用》

## 摘要 本文探討了基于Python的網絡爬蟲抓包技術及其應用。隨著互聯網數據的快速增長,網絡爬蟲技術在數據采集和分析中扮演著越來越重要的角色。本研究首先介紹了網絡爬蟲的基本概念和Python在爬蟲開發中的優勢,然后深入分析了抓包技術的原理和常用工具…

【藍橋杯速成】| 1.暴力解題

1高頻考點與暴力解題_嗶哩嗶哩_bilibili 感謝up主分享,以下內容是學習筆記,以c為主,部分python 題目一:維納的年齡 題目內容 美國數學家維納(N.Wiener)智力早熟, 11歲就上了大學。他曾在1935~1936年應邀來中國清華大…

[C++Qt] 槽函數收不到信號問題(信號的注冊)

📢博客主頁:https://loewen.blog.csdn.net📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!📢本文由 丶布布原創,首發于 CSDN,轉載注明出處🙉📢現…

從零開始用AI開發游戲(一)

1. 核心玩法設計 核心目標:玩家需在隨機生成的3D迷宮中尋找出口,躲避陷阱、收集道具、解開謎題。核心機制: 隨機生成迷宮:每次游戲生成不同結構的迷宮(遞歸分割算法或深度優先搜索)。第一人稱視角&#xf…

基于ssm的寵物醫院信息管理系統(全套)

一、系統架構 前端:html | layui | vue | element-ui 后端:spring | springmvc | mybatis 環境:jdk1.8 | mysql | maven | tomcat | idea | nodejs 二、代碼及數據庫 三、功能介紹 01. web端-首頁1 02. web端-首頁…

【CXX】6.7 SharedPtr<T> — std::shared_ptr<T>

std::shared_ptr 的 Rust 綁定稱為 SharedPtr。 限制: SharedPtr 不支持 T 為不透明的 Rust 類型。對于在語言邊界上傳遞不透明 Rust 類型的所有權,應改用 Box(C 中的 rust::Box)。 示例 // src/main.rsuse std::ops::Deref; …

利用python生成excel中模板范圍對應的shape文件

利用python生成excel中模板范圍對應的shape文件 # -*- coding: utf-8 -*- import os.pathimport pandas as pd from shapely.geometry import Polygon from shapely.wkt import dumps import argparse# 創建解析器 parser argparse.ArgumentParser(description"這是一個…

cursor使用

引入私有文檔 設置-> Features->下滑找到Docs url后邊多加一個 / 可以拉取url下所有的頁面(子頁面,子目錄),不加只拉取url當前頁面 使用 選擇 Docs 回車 選擇 文檔 直接解析鏈接 鏈接 回車 搜索引擎 web 對比git版本差異 git 選擇其中一個 g…

達夢數據庫中插入導出圖片的方法與應用

達夢數據庫中插入導出圖片的方法與應用 在數據庫的實際應用場景中,圖片存儲是一項常見且重要的需求。以電商平臺為例,商品展示圖片是吸引消費者的關鍵元素;而在社交軟件里,用戶頭像更是個人形象的直觀體現。針對達夢數據庫&#…

【云原生】動態資源分配(DRA)深度洞察報告

1. DRA 的發展與設計靈感 Kubernetes 早期通過 Device Plugin(設備插件)機制支持 GPU、NIC 等特殊硬件,將節點上可用設備數量上報給 kubelet 和調度器。但設備插件模式存在局限:調度器只能根據節點標簽等屬性粗粒度篩選&#xff…

嵌入式八股ARM篇

前言 ARM篇主要介紹一下寄存器和中斷機制,至于匯編這一塊…還請大家感興趣自行學習 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函數傳參 R4 - R11用來保存程序運算的中間結果或函數的局部變量 在函數調用過程中 注意在發生異常的時候 cortex-M0架構會自動將R0-R3壓入…

Python 實現的采集諸葛靈簽

Python 實現的采集諸葛靈簽 項目介紹 這是一個基于 Python 開發的諸葛靈簽數據采集和展示項目。通過爬蟲技術獲取諸葛神簽的簽文和解簽內容,并提供數據存儲和查詢功能。 項目結構 zhuge/├── zhuge_scraper.py # 爬蟲主程序├── zhuge_pages/ # 數據存儲目錄…