@value用法详解
下文笔者讲述@value方法的功能详解说明,如下所示
value注解的三种使用方式
1.直接写值@Value("string value")
这种方式就是直接把要注入的值字面量写在注解里
比较少用
如果要写死在注解里
那直接定义变量的时候,写固定即可
2.占位符@Value("${myvalue}")
这种方式最常用
通过属性名
将值注入进来。
如果可能为空,需要设置value注解默认值
用法:@Value("${unknown.param:defaultValue}")
3.SpEL表达式@Value("#{someBean.someValue}")
SpEL表达式很强大,还能在属性值基础上加以运算等。
如果可能为空
需要设置默认值
用法:@Value("#{systemProperties['unknown'] ?: 'defaultValue'}")
另:
占位符形式和SpEL表达式是可以结合使用的,如下:
@Value("#{'${listOfValues}'.split(',')}")
private List valuesList;
@value注解的使用场景
1.bean声明的变量 2.setter方法注入 3.构造方法或其它方法的入参例
//bean声明的变量
public static class MyValues {
@Value("#{systemProperties['user.timezone']}")
private String timeZone;
}
//setter 方法中
public static class MyValues {
private String timeZone;
@Value("#{systemProperties['user.timezone']}")
public void setTimeZone(String timeZone) {
this.timeZone = timeZone;
}
}
//方法入参
public class MyValues {
private String timeZone;
@Autowired
public void configure(@Value("#{systemProperties['user.timezone']}") String timeZone) {
this.timeZone = timeZone;
}
}
例
//直接写值
@Value("plainText")
private String plainText;
//普通形式-字符串
@Value("${myValues.string}")
private String myValuesString;
//普通形式-数字
@Value("${myValues.int}")
private int myValuesInt;
//普通形式-布尔类型
@Value("${myValues.boolean}")
private boolean myValuesBoolean;
//数组
@Value("${myValues.array}")
private String[] myValuesArray;
//Map
@Value("#{${myValues.map}}")
private Map<String, String> myValuesMap;
//操作系统属性
@Value("#{systemProperties['user.timezone']}")
private String timeZone;
//表达式结果
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber;
//其它bean的属性
@Value("#{propertiesApplication.class.getName()}")
private String className;
//文件资源
@Value("classpath:larry.txt")
private Resource file;
//URL资源
@Value("https://www.github.com")
private Resource url;
其中,配置文件application.properties内容为:
myValues.int=99
myValues.boolean=true
myValues.string=Larry
myValues.array=my,name,is,larry
myValues.map={name: 'Larry', age: '16', city: 'ShenZhen'}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


