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

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

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

一、 注解來源

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

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

在Springboot項(xiàng)目中可以通過@Value、Enviroment對象和@ConfigurationProperities注解對配置文件進(jìn)行綁定。 

二、@Value注解

1. @Value注解定義

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

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

2. 使用步驟

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

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

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

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

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

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

3.代碼示例

1)創(chuàng)建實(shí)體類并使用@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的啟動(dòng)類中注入對象并測試

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)運(yùn)行結(jié)果:

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

Application Name: MyApplication
Application Version: 1.0.0

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

三、Environment對象

1. Environment對象的定義

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

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

2.代碼示例

在@Value的代碼示例的測試類或Springboot的啟動(dòng)類代碼中,通過@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ù)鍵的名稱。

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

myConfigProperties.name=MyApplication
myConfigProperties.version=1.0.0

四、@ConfigurationProperities注解

1.@ConfigurationProperities注解的定義

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

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

2.@ConfigurationProperities注解使用方法

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

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

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

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

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

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

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

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

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

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

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

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

下面我們來進(jìn)一步了解兩者的不同:

對比項(xiàng)@Value@ConfigurationProperities

底層框架

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

1.底層框架

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

2.功能

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

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

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

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

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

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

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

5.松散綁定

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

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

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

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

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

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

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

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

7.SpEL表達(dá)式

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

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

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

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

六、總結(jié)

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

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

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

相關(guān)文章

最新評論

德庆县| 池州市| 榆中县| 泰州市| 灌云县| 三明市| 福海县| 布尔津县| 民勤县| 广宁县| 兴文县| 清河县| 怀仁县| 紫阳县| 洮南市| 安阳市| 闸北区| 柳河县| 宝坻区| 阿尔山市| 兴国县| 苏尼特右旗| 綦江县| 商河县| 全州县| 岳阳市| 赞皇县| 平和县| 古交市| 鹤山市| 乐至县| 萨嘎县| 乐平市| 瑞安市| 金沙县| 西和县| 夏邑县| 荆州市| 定襄县| 噶尔县| 山西省|