@Value 注解用法

@Value 注解用法
1、注入List
	@Value("#{'${list}'.split(',')}")
	List<String> list;
	application.yaml:
	list: list1,list2,list3
2、注入Map
	@Value("#{${map}}")
	Map<String,String> map;
	application.yaml:
	map: "{key,'value'}"
3、注入基本数据结构
	@Value("${key}")
	String key;
	application.yaml:
	key: mykey
4、${} 和 #{}的区别
   ${}: 取配置文件中的值
   #{}: 使用SpEL表达式,#{}和${}结合使用时${}需使用''包裹
   eg: #{'${flag}':1?2}
<think> 我们正在回答用户关于Spring @Value注解使用方法的问题。根据提供的引用内容,我们可以总结出以下关键点: 1. @Value注解用于将值注入Spring管理的bean中。 2. 它可以注入常量、配置文件中的值、其他bean的属性等。 3. 注入的来源可以是属性文件(通过配置文件加载)。 4. 有两种常见的表达式: - `${property:default_value}`:用于注入外部属性,可以设置默认值。 - `#{obj.property?:default_value}`:用于SpEL表达式,可以引用其他bean的属性,并设置默认值。 5. 注意静态变量(static)和非静态变量在使用@Value注解时的区别(根据引用[2])。 我们将按照以下结构回答: 1. 基本用法:如何通过@Value注入简单值、属性文件中的值。 2. 使用SpEL表达式。 3. 默认值的设置。 4. 静态变量注入的特殊处理。 同时,我们会提供代码示例。 注意:引用[3]提到,要使用@Value注解读取属性文件,首先需要在Spring配置文件中加载属性文件(例如使用util:properties)。但在Spring Boot中,通常使用@PropertySource或默认的application.properties。 由于用户没有指定是传统的Spring XML配置还是Spring Boot,我们将分别说明。 现在开始编写回答。 </think>### Spring @Value 注解使用方法详解 Spring 的 `@Value` 注解用于将值注入Spring 管理的 Bean 中,支持注入常量、配置文件属性、环境变量及 SpEL 表达式等。以下是详细使用方法: #### 1. **基础注入** ```java @Component public class AppConfig { // 注入静态值 @Value("Hello World") private String staticValue; // 注入系统属性 @Value("${user.home}") private String userHome; } ``` #### 2. **注入配置文件属性** 需先在配置中加载属性文件(XML 配置示例): ```xml <util:properties id="appProps" location="classpath:application.properties"/> ``` 或使用 Spring Boot 的 `application.properties` 自动加载。 Java 代码示例: ```java @Component public class DatabaseConfig { // 注入属性值(带默认值) @Value("${db.url:jdbc:default}") private String dbUrl; // 注入数值属性 @Value("${db.timeout:30}") private int timeout; } ``` #### 3. **SpEL 表达式注入** ```java @Component public class CalculationService { // 注入其他Bean的属性 @Value("#{systemProperties['java.version']}") private String javaVersion; // 表达式计算 @Value("#{ T(java.lang.Math).random() * 100 }") private double randomNumber; } ``` #### 4. **静态变量注入的特殊处理** 静态变量需通过 setter 方法间接注入: ```java @Component public class Constants { private static String API_KEY; @Value("${api.key}") public void setApiKey(String key) { API_KEY = key; // 静态变量赋值 } } ``` #### 5. **默认值设置** 当属性不存在时提供默认值: ```java @Value("${cache.size:100}") private int cacheSize; // 若未配置则默认为100 ``` #### 6. **类型支持 自动转换基本类型和常见对象: ```java @Value("2024-01-01") private LocalDate startDate; // 需配置自定义转换器 @Value("true") private boolean enabled; ``` > **最佳实践** > - 优先使用 `application.properties` 集中管理配置 > - 敏感数据建议结合 `@ConfigurationProperties` 类型安全绑定 > - 避免在静态字段直接使用 `@Value`(需通过 setter)[^2][^4] ```mermaid graph TD A[@Value 注入] --> B[基本类型/字符串] A --> C[属性文件 ${...}] A --> D[SpEL 表达式 #{...}] C --> E[默认值设置 ${key:default}] D --> F[对象属性引用] D --> G[方法调用] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值