欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解讀@ConfigurationProperties和@value的區(qū)別

 更新時(shí)間:2025年05月23日 11:12:17   作者:codingPower  
這篇文章主要介紹了@ConfigurationProperties和@value的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在 Spring Boot 中,@ConfigurationProperties@Value 都是用于注入配置值的注解,但它們的設(shè)計(jì)目標(biāo)、使用場(chǎng)景和功能有顯著差異。

以下是它們的核心區(qū)別和適用場(chǎng)景:

1. 功能對(duì)比

特性@ConfigurationProperties@Value
作用范圍批量綁定配置文件中的 一組相關(guān)屬性 到 Bean 的字段。注入 單個(gè)屬性值 到字段或參數(shù)。
松散綁定支持松散綁定(如 myProp、my-prop、MY_PROP)。不支持,屬性名必須嚴(yán)格匹配。
類型安全基于 類型安全的配置綁定(字段類型自動(dòng)轉(zhuǎn)換)。需要手動(dòng)處理類型轉(zhuǎn)換,如 @Value("${port}") int port。
SpEL 表達(dá)式不支持 SpEL 表達(dá)式。支持 SpEL 表達(dá)式(如 @Value("#{systemProperties['user']}"))。
默認(rèn)值通過(guò)字段初始化設(shè)置默認(rèn)值(如 private String name = "default";)。可在占位符中指定默認(rèn)值(如 @Value("${name:default}"))。
驗(yàn)證支持支持 JSR-303 驗(yàn)證(如 @NotNull、@Size)。不支持 驗(yàn)證注解。
復(fù)雜對(duì)象綁定支持嵌套對(duì)象、集合、Map 等復(fù)雜結(jié)構(gòu)的綁定。僅支持簡(jiǎn)單類型(需手動(dòng)拆分復(fù)雜結(jié)構(gòu))。

2. 使用場(chǎng)景對(duì)比

@ConfigurationProperties

適用場(chǎng)景

  • 需要將 一組相關(guān)的配置屬性 綁定到一個(gè)對(duì)象(如數(shù)據(jù)庫(kù)配置、第三方服務(wù)配置)。
  • 需要類型安全、自動(dòng)轉(zhuǎn)換和松散綁定。
  • 需要支持嵌套對(duì)象或集合類型(如 List、Map)。

示例一

  // 配置類定義
  @Component
  @ConfigurationProperties(prefix = "app.datasource")
  public class DataSourceConfig {
      private String url;
      private String username;
      private int maxPoolSize;
      // Getters and Setters
  }
  
// 業(yè)務(wù)類調(diào)用
@Service
public class DataSourceService {
    @Autowired
    private DataSourceConfig dataConfig; // 直接注入配置對(duì)象

    public void connect() {
        System.out.println("Connecting to: " + dataConfig.getUrl() + ":" + dataConfig.getUsername());
    }
}

對(duì)應(yīng) application.properties

 # application.properties
 app.datasource.url=jdbc:mysql://localhost:3306/db
 app.datasource.username=power
 app.datasource.max-pool-size=10

對(duì)應(yīng) application.yml:

app:
  datasource:
    url: jdbc:mysql://localhost:3306/db
    username: power
   maxPoolSize: 10

示例二

  • 通過(guò) @EnableConfigurationProperties 顯式啟用‌

‌步驟‌:

  • 在配置類或主啟動(dòng)類上使用 @EnableConfigurationProperties 注解,手動(dòng)注冊(cè)配置類14。
  • 通過(guò)構(gòu)造函數(shù)或 @Autowired 注入配置對(duì)象。

‌代碼示例‌:

/ 配置類定義(無(wú)需 @Component)
@ConfigurationProperties(prefix = "app.mail")
public class MailConfig {
    private String host;
    private int port;
    // getter/setter
}

// 主啟動(dòng)類顯式啟用
@SpringBootApplication
@EnableConfigurationProperties(MailConfig.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

// 業(yè)務(wù)類調(diào)用(構(gòu)造器注入)
@Service
public class MailService {
    private final MailConfig mailConfig;

    public MailService(MailConfig mailConfig) {
        this.mailConfig = mailConfig;
    }
}

@Value

適用場(chǎng)景

  • 注入 單個(gè)簡(jiǎn)單值(如開(kāi)關(guān)標(biāo)志、端口號(hào))。
  • 需要?jiǎng)討B(tài)計(jì)算值(使用 SpEL 表達(dá)式)。
  • 臨時(shí)調(diào)試或快速原型開(kāi)發(fā)。

示例

@Component
public class MyService {
    @Value("${app.feature.enabled:false}")
    private boolean featureEnabled;

    @Value("#{systemProperties['user.timezone']}")
    private String timezone;
}

3. 核心區(qū)別詳解

(1) 類型安全與松散綁定

@ConfigurationProperties

  • 自動(dòng)將配置文件中的屬性轉(zhuǎn)換為字段類型(如 StringintList)。
  • 支持松散綁定(屬性名不嚴(yán)格匹配),例如 myProp、my-prop、MY_PROP 都會(huì)匹配到字段 myProp。

@Value

  • 需要手動(dòng)處理類型轉(zhuǎn)換(如 @Value("${port}") int port)。
  • 屬性名必須嚴(yán)格匹配,否則注入失敗。

(2) 復(fù)雜對(duì)象支持

@ConfigurationProperties

支持嵌套對(duì)象和集合:

app:
  servers:
    - name: server1
      ip: 192.168.1.1
    - name: server2
      ip: 192.168.1.2
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private List<Server> servers;
    // Getters and Setters
}

@Value

需要手動(dòng)拆分復(fù)雜結(jié)構(gòu):

@Value("${app.servers[0].name}")
private String server1Name;

(3) 驗(yàn)證與默認(rèn)值

@ConfigurationProperties

結(jié)合 @Validated 實(shí)現(xiàn)字段驗(yàn)證:

@ConfigurationProperties(prefix = "app")
@Validated
public class AppConfig {
    @NotNull
    private String name;
    @Min(1)
    private int maxConnections;
}

@Value

直接在占位符中設(shè)置默認(rèn)值:

@Value("${app.name:DefaultApp}")
private String appName;

4. 如何選擇?

場(chǎng)景推薦注解
需要綁定一組相關(guān)配置@ConfigurationProperties
需要注入單個(gè)簡(jiǎn)單值@Value
需要支持松散綁定或復(fù)雜結(jié)構(gòu)@ConfigurationProperties
需要使用 SpEL 動(dòng)態(tài)計(jì)算值@Value
需要類型安全與 JSR-303 驗(yàn)證@ConfigurationProperties

總結(jié)

@ConfigurationProperties

適合 集中管理復(fù)雜配置,提供類型安全、松散綁定和驗(yàn)證支持,是 Spring Boot 推薦的配置注入方式。

@Value

適合 快速注入簡(jiǎn)單值或動(dòng)態(tài)計(jì)算值,靈活性高但缺乏類型安全和批量綁定能力。

根據(jù)實(shí)際需求選擇合適的注解,優(yōu)先使用 @ConfigurationProperties 以提高代碼的可維護(hù)性和健壯性。

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

相關(guān)文章

  • @Scheduled在springboot中的使用方式

    @Scheduled在springboot中的使用方式

    這篇文章主要介紹了@Scheduled在springboot中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳細(xì)講解Java抽象類示例

    詳細(xì)講解Java抽象類示例

    這篇文章主要介紹了 Java抽象類示例,抽象類通常用于定義一些公共的方法和屬性,但是這些方法沒(méi)有具體的實(shí)現(xiàn),需要的朋友可以參考下
    2023-05-05
  • maven查看依賴樹(shù)的方法實(shí)現(xiàn)

    maven查看依賴樹(shù)的方法實(shí)現(xiàn)

    Maven依賴樹(shù)是以當(dāng)前項(xiàng)目的POM文件為根節(jié)點(diǎn),列出了所有直接或間接依賴的依賴樹(shù)結(jié)構(gòu),本文就詳細(xì)的來(lái)介紹一下如何查看,感興趣的可以了解一下
    2023-08-08
  • SpringBoot請(qǐng)求轉(zhuǎn)發(fā)的方式小結(jié)

    SpringBoot請(qǐng)求轉(zhuǎn)發(fā)的方式小結(jié)

    本文主要介紹了SpringBoot請(qǐng)求轉(zhuǎn)發(fā)的方式,一共有兩大類,一種是controller控制器轉(zhuǎn)發(fā)一種是使用HttpServletRequest進(jìn)行轉(zhuǎn)發(fā),本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2023-09-09
  • Springboot整合mybatis開(kāi)啟二級(jí)緩存的實(shí)現(xiàn)示例

    Springboot整合mybatis開(kāi)啟二級(jí)緩存的實(shí)現(xiàn)示例

    在一級(jí)緩存中,是查詢兩次數(shù)據(jù)庫(kù)的,顯然這是一種浪費(fèi),既然SQL查詢相同,就沒(méi)有必要再次查庫(kù)了,直接利用緩存數(shù)據(jù)即可,這種思想就是MyBatis二級(jí)緩存的初衷,本文就詳細(xì)的介紹了Springboot整合mybatis開(kāi)啟二級(jí)緩存,感興趣的可以了解一下
    2022-05-05
  • Spring Boot2發(fā)布調(diào)用REST服務(wù)實(shí)現(xiàn)方法

    Spring Boot2發(fā)布調(diào)用REST服務(wù)實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring Boot2發(fā)布調(diào)用REST服務(wù)實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java多條件判斷場(chǎng)景中規(guī)則執(zhí)行器的設(shè)計(jì)

    Java多條件判斷場(chǎng)景中規(guī)則執(zhí)行器的設(shè)計(jì)

    近日在公司領(lǐng)到一個(gè)小需求,需要對(duì)之前已有的試用用戶申請(qǐng)規(guī)則進(jìn)行拓展。本文去掉if 判斷,試試用一個(gè)規(guī)則執(zhí)行器來(lái)替代它,感興趣的可以了解一下
    2021-06-06
  • java創(chuàng)建txt文件并存入內(nèi)容

    java創(chuàng)建txt文件并存入內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了java創(chuàng)建txt文件并存入內(nèi)容,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Java?restTemplate發(fā)送get請(qǐng)求query參數(shù)傳遞問(wèn)題解決

    Java?restTemplate發(fā)送get請(qǐng)求query參數(shù)傳遞問(wèn)題解決

    這篇文章主要為大家介紹了Java?restTemplate發(fā)送get請(qǐng)求query參數(shù)傳遞問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • IDEA標(biāo)簽tabs多行顯示的設(shè)置

    IDEA標(biāo)簽tabs多行顯示的設(shè)置

    這篇文章主要介紹了IDEA標(biāo)簽tabs多行顯示的設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論