此文已由作者赵计刚薪授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
el最常用的几种使用场景:
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。
更多网易技术、产品、运营经验分享请点击。