Spring?Boot?中?@Value注解的使用示例詳解
一、前言
在 Spring Boot 項(xiàng)目中通常需要從 application.properties 或 application.yml 配置文件中讀取配置信息。@Value 注解提供了一種簡(jiǎn)單的方式來(lái)將配置值注入到 Spring 組件中。
二、@Value 注解簡(jiǎn)介
@Value 是 Spring 提供的一個(gè)注解,用于從配置文件或其他來(lái)源(如系統(tǒng)環(huán)境變量、SpEL 表達(dá)式)中讀取值并注入到 Bean 的字段或方法參數(shù)中。其基本語(yǔ)法如下:
@Value("${property.key}")
private String propertyValue;三、@Value 注解的常見(jiàn)用法
1. 讀取 application.properties 或 application.yml 配置值
(1)配置文件示例
application.properties
app.name=Spring Boot Demo app.version=1.0.0
application.yml
app: name: Spring Boot Demo version: 1.0.0
(2)Java 代碼示例
@Component
public class AppConfig {
@Value("${app.name}")
private String appName;
@Value("${app.version}")
private String appVersion;
public void printConfig() {
System.out.println("Application Name: " + appName);
System.out.println("Application Version: " + appVersion);
}
}(3)測(cè)試輸出
Application Name: Spring Boot Demo
Application Version: 1.0.0
2. 使用 @Value 設(shè)置默認(rèn)值
如果配置文件中未定義某個(gè)屬性,則 @Value 注解可以提供一個(gè)默認(rèn)值。默認(rèn)值的語(yǔ)法是 :${defaultValue}:
@Component
public class DefaultValueExample {
@Value("${app.author:Unknown Author}")
private String author;
public void printAuthor() {
System.out.println("Application Author: " + author);
}
}如果 application.properties 或 application.yml 中未配置 app.author,則輸出:
Application Author: Unknown Author
3. 讀取系統(tǒng)環(huán)境變量和 Java 運(yùn)行時(shí)參數(shù)
@Value 也可以用于讀取系統(tǒng)環(huán)境變量或 -D 方式傳遞的 JVM 運(yùn)行參數(shù):
@Component
public class EnvConfig {
@Value("${JAVA_HOME}")
private String javaHome;
@Value("${user.name}")
private String userName;
public void printSystemProperties() {
System.out.println("JAVA_HOME: " + javaHome);
System.out.println("User Name: " + userName);
}
}如果運(yùn)行環(huán)境變量設(shè)置了 JAVA_HOME=/usr/lib/jvm/java-11-openjdk,則輸出:
JAVA_HOME: /usr/lib/jvm/java-11-openjdk
User Name: admin
4. 結(jié)合 Spring Expression Language (SpEL)
@Value 注解支持 Spring 表達(dá)式語(yǔ)言(SpEL),可用于動(dòng)態(tài)計(jì)算值。
(1)基本 SpEL 表達(dá)式
@Component
public class SpELExample {
@Value("#{2 * 5}")
private int result;
public void printResult() {
System.out.println("Result: " + result);
}
}輸出:
Result: 10
(2)引用 Bean 的屬性
@Component
public class AnotherBean {
private String message = "Hello from AnotherBean";
public String getMessage() {
return message;
}
}
@Component
public class BeanReferenceExample {
@Autowired
private AnotherBean anotherBean;
@Value("#{anotherBean.message}")
private String messageFromAnotherBean;
public void printMessage() {
System.out.println(messageFromAnotherBean);
}
}輸出:
Hello from AnotherBean
5. 讀取數(shù)組、集合和 Map 類(lèi)型數(shù)據(jù)
(1)讀取數(shù)組
app.servers=192.168.1.1,192.168.1.2,192.168.1.3
@Component
public class ArrayConfig {
@Value("${app.servers}")
private String[] servers;
public void printServers() {
System.out.println(Arrays.toString(servers));
}
}輸出:
[192.168.1.1, 192.168.1.2, 192.168.1.3]
(2)讀取 List
@Component
public class ListConfig {
@Value("#{'${app.servers}'.split(',')}")
private List<String> serverList;
public void printServerList() {
System.out.println(serverList);
}
}輸出:
[192.168.1.1, 192.168.1.2, 192.168.1.3]
(3)讀取 Map
app.db.config=username:admin,password:123456,url:jdbc:mysql://localhost:3306/test
@Component
public class MapConfig {
@Value("#{${app.db.config}}")
private Map<String, String> dbConfig;
public void printDbConfig() {
System.out.println(dbConfig);
}
}輸出:
{username=admin, password=123456, url=jdbc:mysql://localhost:3306/test}
四、@Value 和 @ConfigurationProperties 對(duì)比
| 特性 | @Value | @ConfigurationProperties |
|---|---|---|
| 作用范圍 | 適用于單個(gè)值注入 | 適用于整個(gè)配置對(duì)象映射 |
| 支持的數(shù)據(jù)類(lèi)型 | 主要用于 String、基本類(lèi)型、數(shù)組 | 可綁定復(fù)雜對(duì)象(如 List、Map、自定義對(duì)象) |
| 代碼簡(jiǎn)潔性 | 適用于少量配置參數(shù) | 適用于大量配置參數(shù) |
| 是否支持 SpEL | 支持 | 不支持 |
示例:@ConfigurationProperties 用法
app.name=Spring Boot Demo app.version=1.0.0
@Configuration
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private String name;
private String version;
// getter & setter
}五、總結(jié)
- @Value 注解用于將配置文件中的值注入到 Spring 組件中。
- @Value 可用于讀取 application.properties 或 application.yml 中的值,并支持默認(rèn)值。
- @Value 還能用于讀取環(huán)境變量、JVM 運(yùn)行參數(shù)和 SpEL 表達(dá)式。
- @Value 可以解析數(shù)組、List、Map 等數(shù)據(jù)結(jié)構(gòu)。
- 對(duì)于復(fù)雜配置推薦使用 @ConfigurationProperties,而 @Value 適用于簡(jiǎn)單值注入。
到此這篇關(guān)于Spring Boot 中 @Value注解的使用示例詳解的文章就介紹到這了,更多相關(guān)Spring Boot @Value注解使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用pdfbox實(shí)現(xiàn)給pdf文件加圖片水印
有時(shí)候需要給pdf加水印,市面上工具都是收費(fèi)的要會(huì)員,還是自食其力吧;嘗試過(guò) spire.pdf.free 那個(gè)超過(guò)10頁(yè)就不行了!所以本文還是使用了pdfbox,感興趣的可以了解一下2022-11-11
5個(gè)JAVA入門(mén)必看的經(jīng)典實(shí)例
這篇文章主要為大家詳細(xì)介紹了5個(gè)JAVA入門(mén)必看的經(jīng)典實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
spring?boot教程之建立第一個(gè)HelloWorld
這篇文章主要介紹了spring?boot教程之建立第一個(gè)HelloWorld的相關(guān)資料,需要的朋友可以參考下2022-08-08
Maven最佳實(shí)踐之一個(gè)好的parent依賴(lài)基礎(chǔ)
今天小編就為大家分享一篇關(guān)于Maven最佳實(shí)踐之一個(gè)好的parent依賴(lài)基礎(chǔ),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
RocketMQ消息生產(chǎn)者是如何選擇Broker示例詳解
這篇文章主要為大家介紹了RocketMQ消息生產(chǎn)者是如何選擇Broker示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
springmvc參數(shù)為對(duì)象,數(shù)組的操作
這篇文章主要介紹了springmvc參數(shù)為對(duì)象,數(shù)組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

