最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring如何將配置文件中的簡單值注入Bean中

 更新時間:2025年07月11日 08:31:43   作者:冰糖心書房  
Spring 提供了幾種優(yōu)雅的方式來將配置文件中的簡單值(如字符串、數(shù)字、布爾值等)注入到 Bean 中,下面小編就為大家介紹一下兩種主流的方法吧

Spring 提供了幾種優(yōu)雅的方式來將配置文件中的簡單值(如字符串、數(shù)字、布爾值等)注入到 Bean 中。

主要有兩種主流方法:

  • 使用 @Value 注解:簡單直接,適合注入單個值。
  • 使用 @ConfigurationProperties:類型安全,適合將一組相關(guān)的配置屬性映射到一個對象上,是 Spring Boot 官方推薦的方式。

方法一:使用@Value注解(簡單直接)

@Value 是最直接的方式,它可以從屬性文件、環(huán)境變量、系統(tǒng)屬性等地方讀取值并注入到字段中。

步驟 1:在application.properties中定義屬性

# 字符串
app.name=My Awesome Application
# 數(shù)字
app.thread-pool.size=10
# 布爾值
app.feature.new-ui.enabled=true
# 逗號分隔的列表
app.admin.emails=admin@example.com,support@example.com
# 帶默認(rèn)值的屬性 (我們在代碼中處理)
# app.description=... (假設(shè)這個屬性沒有被定義)

步驟 2:在 Bean 中使用@Value注入

@Value 使用 ${...} 占位符語法來引用屬性。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import jakarta.annotation.PostConstruct; // 使用 jakarta.* 如果是 Spring Boot 3+
import java.util.List;

@Component
public class AppConfig {

    // 注入字符串
    @Value("${app.name}")
    private String appName;

    // Spring 會自動進(jìn)行類型轉(zhuǎn)換,將 "10" 轉(zhuǎn)換為 int
    @Value("${app.thread-pool.size}")
    private int threadPoolSize;

    // 同樣,"true" 會被轉(zhuǎn)換為 boolean
    @Value("${app.feature.new-ui.enabled}")
    private boolean isNewUiEnabled;

    // 注入一個列表 (Spring 會自動按逗號分割)
    @Value("${app.admin.emails}")
    private List<String> adminEmails;

    // 提供默認(rèn)值:如果屬性不存在,則使用冒號后面的默認(rèn)值
    @Value("${app.description:This is a default description}")
    private String appDescription;
    
    // 打印出來看看結(jié)果
    @PostConstruct
    public void printConfig() {
        System.out.println("Application Name: " + appName);
        System.out.println("Thread Pool Size: " + threadPoolSize);
        System.out.println("Is New UI Enabled: " + isNewUiEnabled);
        System.out.println("Admin Emails: " + adminEmails);
        System.out.println("Application Description: " + appDescription);
    }
}

@Value 的優(yōu)點:

  • 非常簡單,用于注入少量、零散的配置時非常方便。
  • 支持 SpEL(Spring Expression Language),功能強(qiáng)大,例如可以注入其他 Bean 的屬性值:@Value("#{otherBean.someProperty}")。

@Value 的缺點:

  • 當(dāng)屬性很多時,代碼會變得冗長和分散。
  • 不是類型安全的。如果你在屬性文件中寫了一個非數(shù)字的值給 threadPoolSize,錯誤只會在運(yùn)行時才會暴露。
  • 重構(gòu)不友好(比如修改屬性前綴)。

方法二:使用@ConfigurationProperties(官方推薦)

這種方式將一組相關(guān)的配置屬性綁定到一個類型安全的 POJO(Plain Old Java Object)上。

步驟 1:在application.properties中定義屬性(與上面相同)

app.name=My Awesome Application
app.thread-pool.size=10
app.feature.new-ui.enabled=true
app.admin.emails=admin@example.com,support@example.com

步驟 2:創(chuàng)建一個配置屬性類

這個類就是一個普通的 Java 類,包含了與配置文件中屬性名對應(yīng)的字段。

import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;

// 這個注解告訴 Spring,將 "app" 前綴的屬性綁定到這個類的字段上
@ConfigurationProperties(prefix = "app")
public class AppProperties {

    private String name;
    private List<String> adminEmails;
    // 注意:這里我們創(chuàng)建一個嵌套類來映射嵌套的屬性,結(jié)構(gòu)更清晰
    private final ThreadPool threadPool = new ThreadPool();
    private final Feature feature = new Feature();

    // 嵌套類,用于映射 app.thread-pool.*
    public static class ThreadPool {
        private int size;
        // Getter and Setter...
        public int getSize() { return size; }
        public void setSize(int size) { this.size = size; }
    }

    // 嵌套類,用于映射 app.feature.*
    public static class Feature {
        private final NewUi newUi = new NewUi();
        public static class NewUi {
            private boolean enabled;
            // Getter and Setter...
            public boolean isEnabled() { return enabled; }
            public void setEnabled(boolean enabled) { this.enabled = enabled; }
        }
        public NewUi getNewUi() { return newUi; }
    }

    // 主類的 Getters and Setters...
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public List<String> getAdminEmails() { return adminEmails; }
    public void setAdminEmails(List<String> adminEmails) { this.adminEmails = adminEmails; }
    public ThreadPool getThreadPool() { return threadPool; }
    public Feature getFeature() { return feature; }
}

注意

  • Spring Boot 會自動將 kebab-case(如 thread-pool.size)或 snake_case(thread_pool.size)的屬性名映射到 camelCase(threadPool.size)的字段名。
  • 必須提供標(biāo)準(zhǔn)的 Getters 和 Setters,Spring Boot 通過它們來設(shè)置值。

步驟 3:在主配置類中啟用這個屬性類

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
// 告訴 Spring Boot 啟用 AppProperties,并將其注冊為一個 Bean
@EnableConfigurationProperties(AppProperties.class)
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

步驟 4:在任何其他 Bean 中注入和使用這個屬性對象

現(xiàn)在,你可以像注入任何其他 Service 一樣,注入整個 AppProperties 對象。

import org.springframework.stereotype.Service;

@Service
public class MyBusinessService {

    private final AppProperties appProperties;

    // 通過構(gòu)造函數(shù)注入,非常清晰
    public MyBusinessService(AppProperties appProperties) {
        this.appProperties = appProperties;
    }

    public void doSomething() {
        System.out.println("Running service for app: " + appProperties.getName());
        if (appProperties.getFeature().getNewUi().isEnabled()) {
            System.out.println("Using the new UI with thread pool size: " + appProperties.getThreadPool().getSize());
        }
    }
}

總結(jié):@Valuevs@ConfigurationProperties

特性@Value@ConfigurationProperties (推薦)
用途注入單個、零散的值將一組相關(guān)的配置綁定到一個對象
類型安全運(yùn)行時檢查,弱類型編譯時綁定(部分 IDE 支持),強(qiáng)類型
代碼組織配置分散在多個類中配置集中在一個 POJO 中,結(jié)構(gòu)清晰
驗證不支持 JSR-303 驗證支持 @Validated 注解進(jìn)行數(shù)據(jù)校驗
IDE 支持弱(簡單的字符串跳轉(zhuǎn))強(qiáng)大(在 .properties 文件中輸入時會有代碼提示和元數(shù)據(jù)支持)
靈活性支持 SpEL,更靈活面向結(jié)構(gòu)化配置,更規(guī)范

最佳實踐:

  • 優(yōu)先使用 @ConfigurationProperties。它讓你的代碼更健壯、更易于維護(hù)和測試。
  • 只有當(dāng)你需要注入單個與其他配置無關(guān)的值,或者需要利用 SpEL 的強(qiáng)大功能時,考慮使用 @Value。

到此這篇關(guān)于Spring如何將配置文件中的簡單值注入Bean中的文章就介紹到這了,更多相關(guān)Spring注入Bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot如何從數(shù)據(jù)庫獲取數(shù)據(jù),用echarts顯示(數(shù)據(jù)可視化)

    springboot如何從數(shù)據(jù)庫獲取數(shù)據(jù),用echarts顯示(數(shù)據(jù)可視化)

    這篇文章主要介紹了springboot如何從數(shù)據(jù)庫獲取數(shù)據(jù),用echarts顯示(數(shù)據(jù)可視化),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java如何基于poi操作Wold工具類

    Java如何基于poi操作Wold工具類

    這篇文章主要介紹了Java如何基于poi操作Wold工具類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 詳解Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹

    詳解Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹

    平衡二叉樹(Balanced?Binary?Tree)又被稱為AVL樹(有別于AVL算法),且具有以下性質(zhì):它是一?棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。本文將詳解介紹一下平衡二叉樹的原理與實現(xiàn),需要的可以參考一下
    2022-02-02
  • Springboot中@Value的使用詳解

    Springboot中@Value的使用詳解

    這篇文章主要介紹了Springboot中@Value的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java中臨時文件目錄的使用

    Java中臨時文件目錄的使用

    :Java提供了系統(tǒng)屬性java.io.tmpdir來獲取默認(rèn)臨時文件目錄,適用于不同操作系統(tǒng),使用Files.createTempFile方法創(chuàng)建臨時文件,并在不需要時應(yīng)及時刪除,下面就來介紹一下
    2024-10-10
  • Maven介紹與配置+IDEA集成Maven+使用Maven命令小結(jié)

    Maven介紹與配置+IDEA集成Maven+使用Maven命令小結(jié)

    Maven是Apache軟件基金會的一個開源項目,是一個優(yōu)秀的項目構(gòu)建管理工具,它用來幫助開發(fā)者管理項目中的 jar,以及 jar 之間的依賴關(guān)系、完成項目的編譯、測試、打包和發(fā)布等工作,本文給大家介紹Maven介紹與配置+IDEA集成Maven+使用Maven命令,感興趣的朋友一起看看吧
    2024-01-01
  • SpringBoot集成極光推送的實現(xiàn)代碼

    SpringBoot集成極光推送的實現(xiàn)代碼

    工作中經(jīng)常會遇到服務(wù)器向App推送消息的需求,一般企業(yè)中選擇用極光推送的比較多,本文就介紹了SpringBoot集成極光推送的實現(xiàn)代碼,感興趣的可以了解一下
    2023-08-08
  • Mybatis 級聯(lián)刪除的實現(xiàn)

    Mybatis 級聯(lián)刪除的實現(xiàn)

    這篇文章主要介紹了Mybatis 級聯(lián)刪除的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java讀取Map的兩種方法與對比

    Java讀取Map的兩種方法與對比

    相信大家都知道在Java中Map的使用非常頻繁,我們經(jīng)常會需要對Map進(jìn)行遍歷和讀取,那么下面這篇文章將展示兩種遍歷的方法以及簡要分析。有需要的可以參考借鑒,下面來一起看看吧。
    2016-11-11
  • sharding-jdbc 兼容 MybatisPlus動態(tài)數(shù)據(jù)源的配置方法

    sharding-jdbc 兼容 MybatisPlus動態(tài)數(shù)據(jù)源的配置方法

    這篇文章主要介紹了sharding-jdbc 兼容 MybatisPlus動態(tài)數(shù)據(jù)源的配置方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-07-07

最新評論

昔阳县| 乡宁县| 高阳县| 淳化县| 正镶白旗| 常山县| 婺源县| 双流县| 福泉市| 旬阳县| 南岸区| 湘乡市| 望江县| 江西省| 桦川县| 定兴县| 克什克腾旗| 吉木萨尔县| 秀山| 富源县| 镇巴县| 西吉县| 平顶山市| 犍为县| 浦东新区| 信阳市| 平潭县| 阳城县| 岑巩县| 依兰县| 天峨县| 曲沃县| 衡东县| 乌鲁木齐市| 驻马店市| 涞水县| 沂源县| 贵南县| 年辖:市辖区| 达州市| 贡山|