介绍:
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