介绍:
Spring @Value批注用于将值注入变量和方法参数。 我们可以读取spring环境变量或系统变量。 它还支持SpEL。
在本快速教程中,我们将探讨如何使用Spring @Value批注。
设定:
首先,我们在app.properties文件中定义一些属性:
user.first.name=Sam
user.stocks=50
user.address=California
user.preferences=A,B,C
products.count={P1: '3', P2: '10', P3: '5'}
这些是本教程中用于示例的属性。
另外,让我们快速定义AppConfiguration类:
@Configuration
@PropertySource("classpath:app.properties")
public class AppConfiguration {
...
}
Spring
我们可以使用@Value注释为类属性分配默认值:
@Value("10")
private int value;
@Value("Hello World")
private String msg;
请注意,它仅接受String参数,但是在值注入期间,传入的值将转换为适当的类型。
读取Spring环境变量:
我们可以使用@Value注释来读取Spring环境变量:
@Value("${user.first.name}")
private String userFirstName;
我们还可以读取值列表:
@Value("${user.preferences}")
private String[] userPreferences;
现在,让我们尝试使用@Value注释读取值'products.count'的映射:
@Value("#{${products.count}}")
private Map<String, Integer> productsCount;
要从地图中获取特定键的值,我们将使用:
@Value("#{${products.count}.P1}")
private Integer p1Count;
读取系统变量:
使用Spring @Value ,我们还可以直接读取系统变量:
@Value("${java.home}")
private String javaHome;
或使用SpEL:
@Value("#{systemProperties['java.home']}")
private String javaHome;
分配默认值:
如果我们希望在缺少属性的情况下分配默认值怎么办? 是的,我们可以使用Spring @Value批注的默认构造来做到这一点:
@Value("${user.stocks:30}")
private int stockCount;
在这里,仅当属性文件中缺少'user.stocks'属性时,才会将默认值30分配给stockCount 。
使用SpEL时,我们还可以分配一个默认值:
@Value("#{systemProperties['abc'] ?: 'default value'}")
private String unknownSystemProperty;
在方法中注入值:
除了基于字段的注入,我们还可以在方法上使用@Value注释:
@Value("${user.first.name}")
public void setUserName(String userName) {
this.userName = userName;
}
如果我们在方法上使用@Value批注,则其所有参数都将映射到相同的值。
如果要向不同的参数注入不同的参数,则可以将@Value注释与方法参数一起使用:
public void setUserDetails(@Value("${user.first.name}")String userName,
@Value("${user.address}") String address) {
this.userName = userName;
this.address = address;
}
结论:
在本教程中,我们探索了使用@Value注释注入属性值的不同方法。 我们可以将@Value注释与字段或方法一起使用。
翻译自: https://www.javacodegeeks.com/2019/05/spring-value-annotation.html