简介:

Spring 表达式语言 Spring Expression Language(简称 SpEL )是一个支持运行时查询和操作对象图的表达式语言 。 语法类似于 EL 表达式 ,但提供了显式方法调用和基本字符串模板函数等额外特性 。

SpEL 虽然作为 Spring 家族中表达式求值的基础,但却可以被独立使用。

1.数字计算

SpelExpressionParser parser = new SpelExpressionParser();
       Expression expression = parser.parseExpression("6+2");
       System.out.println(expression.getValue());

2.字符串相关操作

SpelExpressionParser parser = new SpelExpressionParser();
       Expression expression = parser.parseExpression("'SPEL'.concat('hell world')");
       Object value = expression.getValue();
       System.out.println(value);

3.调用方法

方法:

public class TestMethod {
   public String run(String name){
       return name.concat(" is running.....");
  }
}

Spel调用方法

StandardEvaluationContext context = new StandardEvaluationContext(new TestMethod());
       context.setVariable("abc","xiaoming");//设置一个变量abc
       SpelExpressionParser parser = new SpelExpressionParser();
//调用new TestMethod()#run方法,用#abc将变量从StandardEvaluationContext取出来传递给run方法
       Expression expressionParser = parser.parseExpression("run(#abc)");
//expressionParser.getValue(context)获取方法的返回值
       System.out.println(expressionParser.getValue(context));

Spel嵌套调用方法

public static  DeptPO local2(Long deptno){
       StandardEvaluationContext context = new StandardEvaluationContext(new People());
       context.setVariable("deptno",deptno);
       SpelExpressionParser parser = new SpelExpressionParser();
       Expression expression = parser.parseExpression("local(dname(#deptno).getDname())");
       return (DeptPO) expression.getValue(context);
  }
@Data
public class People {
   public DeptPO local(String dname){
       return new DeptPO(1L,dname,"北京");
  }

   public DeptPO dname(Long deptno){
       return new DeptPO(deptno,"默认","北京");
  }
}