Spring @Value 应用参考
本文带你了解@value注解使用。@value用于给spring管理的bean字段注入值,可以在字段、构造函数、方法参数上使用。
示例准备
为了描述@value注解的多种应用方式,我们需要一个简单spring应用配置类。通常我们使用属性文件定义需要通过@value注入的值。当然,我们首先需要在配置上添加@PropertySource,并指定属性文件名称。
定义属性文件的内容如下:
value.from.file=Value got from the file
priority=Properties file
listOfValues=A,B,C
使用示例
最基本很少使用的用法是通过注解注入字符串值。
@Value("string value")
private String stringValue;
使用@PropertySource注解可以使用属性文件中的值,在下面示例中把文件中的值赋给bean属性:
@Value("${value.from.file}")
private String valueFromFile;
我们也可以通过系统属性赋值,下面示例假设我们定义了一个系统属性,名称为systemValue:
@Value("${systemValue}")
private String systemValue;
通过缺省属性可以给bean属性指定缺省值,避免属性没有定义时取不到值,示例如下:
@Value("${unknown.param:some default}")
private String someDefault;
如果系统属性和属性文件中都定义相同的属性,那么系统属性优先被使用。
假设我们有一个priority 属性定义在系统属性中,值为“System property” ,同时在属性文件中也定义了,值为任何其他值。下面示例的代码中值最终为“System property” 。
@Value("${priority}")
private String prioritySystemProperty;
有时我们需要注入多个值。在系统属性或属性文件中通过定义逗号分割值赋值给数组类型属性。前面我们定义的属性文件中listOfValues为多值情况,所以下面示例数组值为: [“A”, “B”, “C”]。
@Value("${listOfValues}")
private String[] valuesArray;
SPEL示例
我们也可以使用SpEL表达式获取值,假设有priority系统属性,通过SpEL赋值代码如下:
@Value("#{systemProperties['priority']}")
private String spelValue;
如没有定义系统属性,则赋值为null。为了避免null,可以在SpEL中提供缺省值,下面示例“some default” 作为缺省值:
@Value("#{systemProperties['unknown'] ?: 'some default'}")
private String spelSomeDefault;
另外,可以使用其他bean的属性值。假设someBean有属性someValue,值为10.则下面属性值为10.
@Value("#{someBean.someValue}")
private Integer someBeanValue;
我们也可以List属性赋值,下面示例属性值为A, B, C:
@Value("#{
'${listOfValues}'.split(',')}")
private List<String> valuesList;
总结
本文通过示例简要展示了 @Value几种不同的用法,可以从属性文件或系统属性中取值,也可以通过SpEL表达式计算赋值。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/79338013