一、前言
SpEL(Spring Expression Language),即Spring表达式语言,是比JSP的EL更强大的一种表达式语言。为什么要总结SpEL,因为它可以在运行时查询和操作数据,尤其是数组列表型数据,因此可以缩减代码量,优化代码结构。
二、SpEL支持的运算符号
- 算术运算符:+,-,*,/,%,^ (加号也可以用作字符串连接)
- 比较运算符:< ,> , == , >= , <= , lt , gt , eg , le , ge
- 逻辑运算符:and , or ,not , |
- if-else 运算符
- 正则表达式
三、Expression
@Test
void testSqEL() {
//创建表达式列表
ArrayList<String> list = new ArrayList<>();
list.add("#A == 1");
list.add("#B == 1");
list.add("#C == 1 && #D == 1");
list.add("#B == 1 && #D == 1");
//创建参数map
HashMap<String, Object> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 1);
map.put("D", 1);
System.out.print("参数值:");
System.out.println(map.toString());
//创建ExpressionParser解析表达式
ExpressionParser parser = new SpelExpressionParser();
//创建一个虚拟的容器EvaluationContext
StandardEvaluationContext context = new StandardEvaluationContext();
for (Map.Entry e : map.entrySet()
) {
String key = (String) e.getKey();
Integer value = (Integer) e.getValue();
//向容器内添加变量
context.setVariable(key, value);
}
list.stream().forEach(expression -> {
System.out.print("expression : " + expression);
//getValue有参数context,从新的容器中根据SpEL表达式获取所需的值
Boolean flag = parser.parseExpression(expression).getValue(context, Boolean.class);
System.out.println("\t结果:" + flag);
});
}