EL表达式常见用法

勿忘初心2018-12-02 13:52

此文已由作者赵计刚薪授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。


el最常用的几种使用场景:

  • 从配置文件中读取属性
  • 缺失值情况下,配置默认值
  • el内部字符串使用String的方法
  • 三目运算符
  • 正则表达式
  • 注入系统属性(system properties)
  • 调用系统原有函数
  • 直接注入文件进行操作
  • 读取另一个bean的函数的返回值

1、从配置文件中读取属性

application.properties

name=\u8D75\u8BA1\u521A
1     @Value("${name}")//这里必须使用$,使用#是不行的
2     private String name;
3     @RequestMapping(value = "/name", method = RequestMethod.GET)
4     public String getName() {
5         return name;
6     }

注意:记住下边三句话

  • ${}不支持表达式(三目表达式不算表达式);#{}支持
  • ${}读取属性文件的值
  • ${}读取最后一个满足条件的值;#{}读取所有满足条件的值

2、缺失值情况下,配置默认值

1     @Value("${name2:'刚子'}")//这里必须使用$,使用#是不行的
2     private String name2;
3     @RequestMapping(value = "/name2", method = RequestMethod.GET)
4     public String getName2() {
5         return name2;
6     }

3、el内部字符串使用String的方法

1 name.list=\u8D75\u8BA1\u521A,\u738B\u5A1C
1     @Value("#{'${name.list}'.split(',')}")
2     private List<String> nameList;
3     @RequestMapping(value = "/nameList", method = RequestMethod.GET)
4     public List<String> getNameList() {
5         return nameList;
6     }

4、三目运算符

1 name.three=\u6768\u8FC7
1     @RequestMapping(value = "/nameThree", method = RequestMethod.GET)
2     public String getNameThree(@Value("${name.three!='杨过'?'黄蓉':'小龙女'}") String nameThree) {
3         return nameThree;
4     }

注意:@value可以直接作为入参

5、正则表达式

1     @Value("#{'100' matches '\\d+'}")//这里必须使用#,使用$是不行的
2     private boolean isDigital;
3     @RequestMapping(value = "/nameRegEx", method = RequestMethod.GET)
4     public boolean getNameRegEx() {
5         return isDigital;
6     }

6、注入系统属性

1     @Value("#{systemProperties['os.name']}")//这里必须使用#,使用$是不行的
2     private String osName;
3     @RequestMapping(value = "/osName", method = RequestMethod.GET)
4     public String getOsName() {
5         return osName;
6     }

7、调用系统原有函数

1     @Value("#{T(java.lang.Math).random() * 10}")//注意:这里只生成一次,之后你无论调用多少次getRandomValue(),都返回同一个值
2     private String randomValue;
3     @RequestMapping(value = "/randomValue", method = RequestMethod.GET)
4     public String getRandomValue() {
5         return randomValue;
6     }

8、直接注入文件进行操作

testfile/testEl.txt

1 乔峰--降龙十八掌
2 杨过--黯然销魂掌
 1     @Value("classpath:testfile/testEl.txt")
 2     private Resource txtResource;
 3     @RequestMapping(value = "/resource", method = RequestMethod.GET)
 4     public String getResource() {
 5         try {
 6             return IOUtils.toString(txtResource.getInputStream(), "UTF-8");
 7         } catch (IOException e) {
 8             ExceptionUtils.getStackTrace(e);
 9         }
10         return StringUtils.EMPTY;
11     }

注意:这个很重要,操作文件使用Apache.commons.io.IOUtils来操作。

9、读取另一个bean的函数的返回值

1 @Component("eLComponent")
2 public class ELComponent {
3     public String getNameBean(){
4         return "乔峰";
5     }
6 }
1     @Value("#{eLComponent.getNameBean()}")//这里必须使用#,使用$是不行的
2     private String nameBean;
3     @RequestMapping(value = "/nameBean", method = RequestMethod.GET)
4     public String getNameBean() {
5         return nameBean;
6     }

注意:被调用bean最好指定一下beanName。


免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击