Spring?Boot?中?@Value注解的使用示例詳解
一、前言
在 Spring Boot 項目中通常需要從 application.properties
或 application.yml
配置文件中讀取配置信息。@Value
注解提供了一種簡單的方式來將配置值注入到 Spring 組件中。
二、@Value 注解簡介
@Value
是 Spring 提供的一個注解,用于從配置文件或其他來源(如系統(tǒng)環(huán)境變量、SpEL 表達式)中讀取值并注入到 Bean 的字段或方法參數(shù)中。其基本語法如下:
@Value("${property.key}") private String propertyValue;
三、@Value 注解的常見用法
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)測試輸出
Application Name: Spring Boot Demo
Application Version: 1.0.0
2. 使用 @Value 設置默認值
如果配置文件中未定義某個屬性,則 @Value
注解可以提供一個默認值。默認值的語法是 :${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 運行時參數(shù)
@Value
也可以用于讀取系統(tǒng)環(huán)境變量或 -D
方式傳遞的 JVM 運行參數(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); } }
如果運行環(huán)境變量設置了 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 表達式語言(SpEL),可用于動態(tài)計算值。
(1)基本 SpEL 表達式
@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 類型數(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 對比
特性 | @Value | @ConfigurationProperties |
---|---|---|
作用范圍 | 適用于單個值注入 | 適用于整個配置對象映射 |
支持的數(shù)據(jù)類型 | 主要用于 String、基本類型、數(shù)組 | 可綁定復雜對象(如 List、Map、自定義對象) |
代碼簡潔性 | 適用于少量配置參數(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 中的值,并支持默認值。
- @Value 還能用于讀取環(huán)境變量、JVM 運行參數(shù)和 SpEL 表達式。
- @Value 可以解析數(shù)組、List、Map 等數(shù)據(jù)結(jié)構(gòu)。
- 對于復雜配置推薦使用 @ConfigurationProperties,而 @Value 適用于簡單值注入。
到此這篇關于Spring Boot 中 @Value注解的使用示例詳解的文章就介紹到這了,更多相關Spring Boot @Value注解使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot中通過AOP整合日志文件的實現(xiàn)
本文主要介紹了SpringBoot中通過AOP整合日志文件的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12使用java實現(xiàn)百萬級別數(shù)據(jù)導出excel的三種方式
這篇文章主要介紹了使用java實現(xiàn)百萬級別數(shù)據(jù)導出excel的三種方式,有些業(yè)務系統(tǒng)可能動輒涉及到百萬上千萬的數(shù)據(jù),用正常的方法效率就變得很低,今天我們來看看這幾種實現(xiàn)思路2023-03-03Java某個經(jīng)緯度是否在genjson文件中問題
GeoJSON是一種用于地理空間信息數(shù)據(jù)交換的格式,基于JSON,要判斷某個經(jīng)緯度是否在某個區(qū)域內(nèi),首先需要解析GeoJSON文件,確定區(qū)域邊界,然后使用經(jīng)緯度進行比較2024-11-11springboot layui hutool Excel導入的實現(xiàn)
本文主要介紹了springboot layui hutool Excel導入的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-03-03