el最常用的几种使用场景:
- 从配置文件中读取属性
- 缺失值情况下,配置默认值
- el内部字符串使用String的方法
- 三目运算符
- 正则表达式
- 注入系统属性(system properties)
- 调用系统原有函数
- 直接注入文件进行操作
- 读取另一个bean的函数的返回值
1、从配置文件中读取属性
application.properties
name=\u8D75\u8BA1\u521A
@Value("${name}")//这里必须使用$,使用#是不行的
private String name;
@RequestMapping(value = "/name", method = RequestMethod.GET)
public String getName() {
return name;
}
注意:记住下边三句话
- ${}不支持表达式(三目表达式不算表达式);#{}支持
- ${}读取属性文件的值
- ${}读取最后一个满足条件的值;#{}读取所有满足条件的值
2、缺失值情况下,配置默认值
@Value("${name2:'刚子'}")//这里必须使用$,使用#是不行的
private String name2;
@RequestMapping(value = "/name2", method = RequestMethod.GET)
public String getName2() {
return name2;
}
3、el内部字符串使用String的方法
name.list=\u8D75\u8BA1\u521A,\u738B\u5A1C
@Value("#{'${name.list}'.split(',')}")
private List<String> nameList;
@RequestMapping(value = "/nameList", method = RequestMethod.GET)
public List<String> getNameList() {
return nameList;
}
4、三目运算符
name.three=\u6768\u8FC7
@RequestMapping(value = "/nameThree", method = RequestMethod.GET)
public String getNameThree(@Value("${name.three!='杨过'?'黄蓉':'小龙女'}") String nameThree) {
return nameThree;
}
注意:@value可以直接作为入参
5、正则表达式
@Value("#{'100' matches '\\d+'}")//这里必须使用#,使用$是不行的
private boolean isDigital;
@RequestMapping(value = "/nameRegEx", method = RequestMethod.GET)
public boolean getNameRegEx() {
return isDigital;
}
6、注入系统属性
@Value("#{systemProperties['os.name']}")//这里必须使用#,使用$是不行的
private String osName;
@RequestMapping(value = "/osName", method = RequestMethod.GET)
public String getOsName() {
return osName;
}
7、调用系统原有函数
@Value("#{T(java.lang.Math).random() * 10}")//注意:这里只生成一次,之后你无论调用多少次getRandomValue(),都返回同一个值
private String randomValue;
@RequestMapping(value = "/randomValue", method = RequestMethod.GET)
public String getRandomValue() {
return randomValue;
}
8、直接注入文件进行操作
testfile/testEl.txt
乔峰--降龙十八掌
杨过--黯然销魂掌
@Value("classpath:testfile/testEl.txt")
private Resource txtResource;
@RequestMapping(value = "/resource", method = RequestMethod.GET)
public String getResource() {
try {
return IOUtils.toString(txtResource.getInputStream(), "UTF-8");
} catch (IOException e) {
ExceptionUtils.getStackTrace(e);
}
return StringUtils.EMPTY;
}
注意:这个很重要,操作文件使用Apache.commons.io.IOUtils来操作。
9、读取另一个bean的函数的返回值
@Component("eLComponent")
public class ELComponent {
public String getNameBean(){
return "乔峰";
}
}
@Value("#{eLComponent.getNameBean()}")//这里必须使用#,使用$是不行的
private String nameBean;
@RequestMapping(value = "/nameBean", method = RequestMethod.GET)
public String getNameBean() {
return nameBean;
}
注意:被调用bean最好指定一下beanName。