Spring Boot 約定大于配置之如何實(shí)現(xiàn)自定義配置
Spring Boot 約定大于配置:實(shí)現(xiàn)自定義配置
引言
Spring Boot 是一個(gè)基于 Spring 框架的快速開(kāi)發(fā)框架,它的核心理念之一是 “約定大于配置”。這意味著 Spring Boot 提供了許多默認(rèn)配置,開(kāi)發(fā)者只需要關(guān)注自己的業(yè)務(wù)邏輯,而不需要手動(dòng)配置大量的細(xì)節(jié)。然而,在某些情況下,我們可能需要自定義配置來(lái)滿足特定的需求。本文將介紹如何在 Spring Boot 中實(shí)現(xiàn)自定義配置,并通過(guò)實(shí)現(xiàn)接口和添加 @Configuration
注解來(lái)完成這一過(guò)程。
1. Spring Boot 的約定大于配置
Spring Boot 的“約定大于配置”理念體現(xiàn)在以下幾個(gè)方面:
- 自動(dòng)配置:Spring Boot 根據(jù)項(xiàng)目的依賴自動(dòng)配置應(yīng)用程序。例如,如果項(xiàng)目中引入了
spring-boot-starter-web
,Spring Boot 會(huì)自動(dòng)配置 Tomcat 和 Spring MVC。 - 默認(rèn)配置:Spring Boot 提供了許多默認(rèn)配置,例如默認(rèn)的端口號(hào)是
8080
,默認(rèn)的靜態(tài)資源路徑是classpath:/static
等。 - 簡(jiǎn)化配置:通過(guò)
application.properties
或application.yml
文件,開(kāi)發(fā)者可以輕松覆蓋默認(rèn)配置。
這種設(shè)計(jì)大大減少了開(kāi)發(fā)者的配置工作量,使得開(kāi)發(fā)者可以更專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。
2. 自定義配置的需求
盡管 Spring Boot 提供了許多默認(rèn)配置,但在實(shí)際開(kāi)發(fā)中,我們可能需要自定義一些配置。例如:
- 自定義 Bean 的加載順序。
- 自定義某些組件的初始化邏輯。
- 根據(jù)環(huán)境變量動(dòng)態(tài)加載配置。
為了實(shí)現(xiàn)這些需求,Spring Boot 提供了靈活的擴(kuò)展機(jī)制,允許開(kāi)發(fā)者通過(guò)實(shí)現(xiàn)接口和添加注解來(lái)自定義配置。
3. 實(shí)現(xiàn)自定義配置的步驟
在 Spring Boot 中,實(shí)現(xiàn)自定義配置通常需要以下步驟:
- 實(shí)現(xiàn)
WebMvcConfigurer
或其他相關(guān)接口:根據(jù)需求選擇合適的接口。 - 添加
@Configuration
注解:將自定義配置類標(biāo)記為 Spring 的配置類。 - 重寫接口方法:在配置類中重寫接口的方法,實(shí)現(xiàn)自定義邏輯。
下面通過(guò)一個(gè)具體的示例來(lái)演示如何實(shí)現(xiàn)自定義配置。
4. 示例:自定義 Spring MVC 配置
假設(shè)我們需要自定義 Spring MVC 的配置,例如添加一個(gè)攔截器或修改靜態(tài)資源路徑??梢酝ㄟ^(guò)以下步驟實(shí)現(xiàn):
4.1 創(chuàng)建自定義配置類
首先,創(chuàng)建一個(gè)類并實(shí)現(xiàn) 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 // 標(biāo)記為配置類 public class CustomWebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 添加自定義攔截器 registry.addInterceptor(new CustomInterceptor()) .addPathPatterns("/**"); // 攔截所有請(qǐng)求 } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 自定義靜態(tài)資源路徑 registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/custom-static/"); } }
4.2 創(chuàng)建自定義攔截器
在上面的配置類中,我們添加了一個(gè)自定義攔截器。攔截器的實(shí)現(xiàn)如下:
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 { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("CustomInterceptor: 請(qǐng)求被攔截"); return true; // 繼續(xù)執(zhí)行后續(xù)邏輯 } }
4.3 測(cè)試自定義配置
啟動(dòng) Spring Boot 應(yīng)用程序后,訪問(wèn)任意路徑,控制臺(tái)會(huì)輸出 CustomInterceptor: 請(qǐng)求被攔截
,說(shuō)明攔截器已生效。同時(shí),靜態(tài)資源路徑也會(huì)被映射到 classpath:/custom-static/
。
5. 其他自定義配置場(chǎng)景
除了自定義 Spring MVC 配置外,Spring Boot 還支持許多其他自定義配置場(chǎng)景。以下是一些常見(jiàn)的示例:
5.1 自定義數(shù)據(jù)源配置
通過(guò)實(shí)現(xiàn) DataSourceInitializer
接口,可以自定義數(shù)據(jù)源的初始化邏輯。
import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class CustomDataSourceConfig { @Bean public DataSource dataSource() { // 自定義數(shù)據(jù)源配置 return new HikariDataSource(); } }
5.2 自定義 Spring Security 配置
通過(guò)繼承 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 { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/public/**").permitAll() .anyRequest().authenticated(); } }
6. 總結(jié)
Spring Boot 的“約定大于配置”理念極大地簡(jiǎn)化了開(kāi)發(fā)流程,但在實(shí)際項(xiàng)目中,我們?nèi)匀恍枰鶕?jù)需求自定義配置。通過(guò)實(shí)現(xiàn)相關(guān)接口(如 WebMvcConfigurer
)并添加 @Configuration
注解,開(kāi)發(fā)者可以靈活地?cái)U(kuò)展和定制 Spring Boot 的默認(rèn)行為。
自定義配置的核心步驟如下:
- 選擇合適的接口(如
WebMvcConfigurer
)。 - 創(chuàng)建配置類并添加
@Configuration
注解。 - 重寫接口方法,實(shí)現(xiàn)自定義邏輯。
希望本文能幫助你更好地理解 Spring Boot 的自定義配置機(jī)制,并在實(shí)際項(xiàng)目中靈活運(yùn)用!
到此這篇關(guān)于Spring Boot 約定大于配置:實(shí)現(xiàn)自定義配置的文章就介紹到這了,更多相關(guān)Spring Boot 約定大于配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot中的static靜態(tài)資源訪問(wèn)、參數(shù)配置、代碼自定義訪問(wèn)規(guī)則詳解
- 關(guān)于SpringBoot自定義條件注解與自動(dòng)配置
- SpringBoot2.0整合Redis自定義注入bean組件配置的實(shí)戰(zhàn)教程
- SpringBoot中的yml文件中讀取自定義配置信息及遇到問(wèn)題小結(jié)
- springboot多環(huán)境配置文件及自定義配置文件路徑詳解
- SpringBoot自定義Starter與自動(dòng)配置實(shí)現(xiàn)方法詳解
- springboot自定義配置及自定義對(duì)象映射的全流程
- 詳解SpringBoot中自定義和配置攔截器的方法
- springboot自定義yml配置文件及其外部部署過(guò)程
- springboot 自定義配置Boolean屬性不生效的解決
- 詳解Spring Boot中如何自定義SpringMVC配置
相關(guān)文章
Java中CyclicBarrier和CountDownLatch的用法與區(qū)別
CyclicBarrier和CountDownLatch這兩個(gè)工具都是在java.util.concurrent包下,并且平時(shí)很多場(chǎng)景都會(huì)使用到。本文將會(huì)對(duì)兩者進(jìn)行分析,記錄他們的用法和區(qū)別,感興趣的可以了解一下2021-08-08java如何不通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象(Unsafe)
這篇文章主要介紹了java如何不通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象(Unsafe)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03mybatis plus自動(dòng)生成器解析(及遇到的坑)
這篇文章主要介紹了mybatis-plus自動(dòng)生成器及遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03使用Java語(yǔ)言實(shí)現(xiàn)一個(gè)冒泡排序
冒泡排序也是一種簡(jiǎn)單直觀的排序算法,基本思想是多次遍歷要排序的數(shù)組,每次比較相鄰的元素,如果順序不對(duì)就交換它們的位置,本篇文章將通過(guò)IDE使用 Java 語(yǔ)言實(shí)現(xiàn)一個(gè)冒泡排序,需要的朋友可以參考下2024-03-03Mybatis-Plus進(jìn)階分頁(yè)與樂(lè)觀鎖插件及通用枚舉和多數(shù)據(jù)源詳解
這篇文章主要介紹了Mybatis-Plus的分頁(yè)插件與樂(lè)觀鎖插件還有通用枚舉和多數(shù)據(jù)源的相關(guān)介紹,文中代碼附有詳細(xì)的注釋,感興趣的朋友來(lái)看看吧2022-03-03Java循環(huán)結(jié)構(gòu)之多重循環(huán)及continue?break
這篇文章主要介紹了Java循環(huán)結(jié)構(gòu)之多重循環(huán)及continue?break,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-09-09