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

基于@Value注解和@ConfigurationProperities注解的區(qū)別及說明

 更新時間:2026年03月16日 09:53:39   作者:dr李四維  
本文主要介紹了Spring?Boot中三種配置屬性的注入方式:@Value、Environment對象和@ConfigurationProperties,通過這些方式,可以方便地將配置文件中的屬性值綁定到Spring管理的Bean對象的屬性上,從而實現(xiàn)配置信息的動態(tài)加載

一、 注解來源

使用Spring boot全局配置文件配置屬性的時候,如果配置的是spring boot內(nèi)置的屬性,那么Springboot會自動掃描并讀取配置文件中的屬性值并覆蓋原有默認(rèn)的屬性。

如果配置的文件是用戶自定義的屬性,可以通過java代碼去讀取該配置屬性,并且把屬性綁定到bean。

在Springboot項目中可以通過@Value、Enviroment對象和@ConfigurationProperities注解對配置文件進行綁定。 

二、@Value注解

1. @Value注解定義

@Value注解是Spring框架提供的一個用于屬性注入的注解,它能夠?qū)⑴渲梦募械膶傩灾到壎ǖ絊pring管理的Bean對象的屬性上。

這使得開發(fā)者可以很方便地將配置信息(如數(shù)據(jù)庫連接信息、應(yīng)用設(shè)置等)從配置文件中讀取并注入到應(yīng)用程序的組件中。

2. 使用步驟

1)創(chuàng)建實體類并在屬性上使用@Value注解注入配置文件中的屬性

首先,定義一個Java類,并在類的屬性上使用@Value注解來指定要注入的配置項。@Value注解的value屬性用于指定配置文件中屬性的鍵名。

2)在項目的resource文件夾下創(chuàng)建配置文件application.yml中添加屬性信息

在Spring Boot項目中,通常會在src/main/resources目錄下創(chuàng)建一個名為application.ymlapplication.properties的配置文件,并在其中定義配置項。

3)在測試類中注入對象,并新增方法輸出測試

通過Spring的依賴注入機制,將使用@Value注解的Bean注入到其他需要使用這些配置信息的組件中,并編寫測試代碼來驗證注入是否成功。

3.代碼示例

1)創(chuàng)建實體類并使用@Value注解

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyConfigProperties {


    // 使用@Value注解指定要從配置文件中注入的屬性值
    @Value("${app.name}")
    private String appName;// 用于存儲應(yīng)用名稱的私有屬性

    @Value("${app.version}")
    private String appVersion;// 用于存儲應(yīng)用版本的私有屬性

    // Getters and Setters
    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public String getAppVersion() {
        return appVersion;
    }

    public void setAppVersion(String appVersion) {
        this.appVersion = appVersion;
    }
}

2)在application.yml文件中添加屬性信息

app:
  name: MyApplication
  version: 1.0.0

3)在測試類或Springboot的啟動類中注入對象并測試

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication implements CommandLineRunner {

    @Autowired
    private MyConfigProperties myConfigProperties;

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

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Application Name: " + myConfigProperties.getAppName());
        System.out.println("Application Version: " + myConfigProperties.getAppVersion());
    }
}

4)運行結(jié)果:

當(dāng)運行上述Springboot應(yīng)用時,控制臺將輸出:

Application Name: MyApplication
Application Version: 1.0.0

這表明MyConfigProperties類中的appNameappVersion屬性已成功從application.yml配置文件中注入。

三、Environment對象

1. Environment對象的定義

使用@Value注解的時候,將該注解標(biāo)注在Spring管控的Bean的屬性名上方,就可以將某個數(shù)據(jù)綁定到Bean對象的屬性。

當(dāng)Bean的屬性比較多且這些屬性都需要綁定配置的數(shù)據(jù)時,操作起來就比較繁瑣。為此,Springboot提供了一個對象Environment,項目在啟動時能夠?qū)⑴渲梦募兴袛?shù)據(jù)都封裝到該對象中,這樣就不需要手動對配置數(shù)據(jù)進行綁定。而且,Environment對象在獲取配置文件中的數(shù)據(jù)時,不需要再提供其他實體類。

2.代碼示例

在@Value的代碼示例的測試類或Springboot的啟動類代碼中,通過@Autowired注入Environment對象,并新增測試方法evnTest(),在測試方式桶通過Environment對象獲取配置文件中的屬性,具體代碼如下:

@Autowired
private Environment env;

@Test
void evnTest(){
    System.out.println("myConfigProperties.name=" + env.getProperty("myConfigProperties.name"));

    System.out.println("myConfigProperties.version=" + env.getProperty("myConfigProperties.version"));
}

上述代碼的evnTest(),方法中,使用Environment對象的getProperty()方法獲取封裝到Environment對象中的配置文件的數(shù)據(jù),該方法的參數(shù)為配置數(shù)據(jù)鍵的名稱。

運行測試方法evnTest(),控制臺會輸出以下內(nèi)容:

myConfigProperties.name=MyApplication
myConfigProperties.version=1.0.0

四、@ConfigurationProperities注解

1.@ConfigurationProperities注解的定義

Java是面向?qū)ο蟮恼Z言,很多情況下,人們習(xí)慣將具有相同特性的一組數(shù)據(jù)封裝到一個對象中,Springboot中就提供了這樣的注解。Springboot的@ConfigurationProperities注解允許我們將配置文件中的屬性綁定到一個Java對象中。

這個注解通常用于將application.propertiesapplication.yml等配置文件中的一組相關(guān)屬性封裝到一個POJO(Plain Old Java Object)中。簡單來說就是可以可以將配置文件中的一組數(shù)據(jù)同時綁定到Bean中。在項目中使用@ConfigurationProperities注解綁定全局配置文件中的數(shù)據(jù)。

2.@ConfigurationProperities注解使用方法

1) 創(chuàng)建一個配置類:這個類通常是一個普通的Java類,它包含了與配置文件中的屬性相對應(yīng)的字段。字段的類型應(yīng)該與配置文件中的屬性值類型相匹配。

2) 在配置類上使用@ConfigurationProperties注解:指定配置文件中的前綴(prefix),這樣Spring Boot就知道要將哪些屬性綁定到這個類的字段上。

3) 確保配置類被Spring管理:這通常通過@Component注解或通過將其作為一個Bean定義在配置類中來實現(xiàn)。

4) application.propertiesapplication.yml中定義屬性:確保這些屬性的鍵名與配置類中的字段名(考慮到前綴)相匹配。

5) 使用配置類:一旦配置類被創(chuàng)建并綁定到配置文件中的屬性,你就可以在應(yīng)用程序的任何地方注入這個配置類,并使用它的字段來訪問配置屬性。

3.代碼示例

1)創(chuàng)建配置類:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    private String name;
    private int version;

    // getters and setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getVersion() {
        return version;
    }

    public void setVersion(int version) {
        this.version = version;
    }
}

2)在application.properties中定義屬性

myapp.name=My Application
myapp.version=1.0.0

3)使用配置類

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication implements CommandLineRunner {

    @Autowired
    private MyAppProperties myAppProperties;

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

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Application Name: " + myAppProperties.getName());
        System.out.println("Application Version: " + myAppProperties.getVersion());
    }
}

4)結(jié)果輸出:

Application Name: My Application
Application Version: 1.0.0

在這個示例中,我們創(chuàng)建了一個名為MyAppProperties的配置類,并使用@ConfigurationProperties(prefix = "myapp")注解將其與配置文件中以myapp為前綴的屬性綁定。

然后,在application.properties文件中定義了myapp.namemyapp.version屬性。

最后,在MyApplication類中注入了MyAppProperties對象,并在應(yīng)用程序啟動時打印了這些屬性的值。

五、@Value注解和@ConfigurationProperities注解的對比分析

通過前面的內(nèi)容可知,@Value注解和@ConfigurationProperities注解都可以對配置文件中的屬性進行綁定,但兩者在使用過程中還是有一些差異的。

軟件開發(fā)人員進行技術(shù)選型時,應(yīng)秉承高度的責(zé)任感,以問題為導(dǎo)向,根據(jù)實際應(yīng)用場景選擇更適合的技術(shù),并制定合理的解決方案,在復(fù)雜的業(yè)務(wù)環(huán)境下科學(xué)的做好技術(shù)選型。

下面我們來進一步了解兩者的不同:

對比項@Value@ConfigurationProperities

底層框架

SpringSpring Boot
功能單個注入配置文件的屬性批量注入配置文件的屬性
為屬性設(shè)置setter方法不需要需要
復(fù)雜類型屬性注入不支持支持
松散綁定不支持支持
JSR303數(shù)據(jù)校驗不支持支持
SpEL表達(dá)式支持不支持

1.底層框架

@Value注解是由Spring框架提供的,只不過Springboot框架對Spring進行了默認(rèn)支持,所以也可以使用@Value注解的相關(guān)功能;@ConfigurationProperities注解是由Springboot框架提供的。

2.功能

@Value注解只需要注入屬性值的單個屬性上進行注入配置;@ConfigurationProperities注解主要用于將配置文件中的某一類整體批量讀取并注入到Bean的屬性中。

3.為屬性設(shè)置setter方法

@Value不需要為屬性設(shè)置setter方法,該注解會先通過表達(dá)式讀取配置文件中指定的屬性值,然后自動注入到下方的Bean屬性上。如果讀取的配置文件屬性值為空,進行屬性注入時程序會報錯。

  @ConfigurationProperities注解進行配置文件屬性注入的時候,還必須為每一個屬性設(shè)置setter方法。如果配置文件中沒有配置屬性值,則會自動將對應(yīng)的Bean屬性設(shè)置為空。

4.復(fù)雜類型屬性注入

@Value在注入復(fù)雜數(shù)據(jù)類型配置數(shù)據(jù)時,會無法解析,導(dǎo)致注入失敗;

@ConfigurationProperities注解支持任意數(shù)據(jù)類型的屬性注入。

5.松散綁定

@ConfigurationProperities注解進行配置文件屬性注入時,支持松散綁定語法。例如Person類中有一個字符串類型的firstName,可以綁定配置文件中的以下屬性:

person.firstName = james    //標(biāo)準(zhǔn)寫法,對應(yīng)Person類屬性名
person.first-name = james   //使用橫線-分隔多個單詞
person.first_name = james   //使用下劃線_分隔多個單詞
PERSON.FIRST_NAME = james   //使用大小寫格式,推薦常量屬性配置

上述示例中列舉了@ConfigurationProperities注解進行配置文件屬性值注入時,支持的配置文件語法,屬于松散綁定語法,而@Value注解不支持此功能。

6.JSR303數(shù)據(jù)校驗

JSR303數(shù)據(jù)校驗的主要作用是校驗配置文件中注入到Bean屬性的值是否符合相關(guān)值的規(guī)則,@ConfigurationProperities注解進行配置文件屬性注入時,支持JSR303數(shù)據(jù)校驗,示例代碼如下:

@Component
@ConfigurationProperities(prefix = "person")
@Validated   //引入Spring框架支持的數(shù)據(jù)校驗規(guī)則
public class Example{
    @Email   //對屬性進行規(guī)則匹配
    private String email;
    public void setEmail(String email){
        this.email = email;
    }
}

在上述代碼中,使用@ConfigurationProperities注解注入配置文件屬性值時,在實體類Example上引用@Validated注解用于數(shù)據(jù)校驗,在屬性email上引入@Email注解進行對應(yīng)會澤校驗。

如果注入的配置文件屬性值不符合相關(guān)校驗規(guī)則,程序會自動報錯。@Value注解不支持JSR303數(shù)據(jù)校驗功能。

7.SpEL表達(dá)式

使用@Value注解注入配置文件屬性時,支持SpEL表達(dá)式語法,即 “ #{xx} ” 。

例如Person類中有一個整數(shù)類型id,可直接使用SpEL表達(dá)式進行屬性注入,代碼示例如下:

@Value("#{5*2}")    //使用@Value注解的SpEL表達(dá)式直接為屬性注入值
private in id;

在上述代碼中,列舉了在不使用配置文件的情況下,可以直接使用@Value注解支持的SpEL表達(dá)式進行Bean的屬性值注入,而@ConfigurationProperities注解不支持此功能。

六、總結(jié)

上述對于@Value注解和@ConfigurationProperities注解進行配置文件屬性注入的主要區(qū)別進行了對比分析,但兩者并沒有明顯的優(yōu)劣之分,它們只是適合的應(yīng)用場景不同而已,不同場景下的使用推薦如下:

  • 如果只是針對某一個業(yè)務(wù)需求,要引入配置文件中的個別屬性,推薦使用@Value注解。
  • 如果針對某個Java Bean類,需要批量注入屬性值,則推薦使用@ConfigurationProperities注解。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

嘉义市| 滦南县| 黄浦区| 白沙| 南漳县| 和顺县| 彩票| 霍林郭勒市| 定兴县| 时尚| 永清县| 阿克| 三台县| 郁南县| 西林县| 改则县| 高密市| 虹口区| 洛隆县| 长汀县| 阿拉尔市| 台北县| 横峰县| 易门县| 涟源市| 平泉县| 布尔津县| 中西区| 新邵县| 漳平市| 个旧市| 罗山县| 寿阳县| 福州市| 习水县| 张家川| 彰武县| 涡阳县| 株洲市| 米脂县| 正宁县|