类名 | 说明 |
ExpressionParser | 表达式解析器接口,包含了(Expression) parseExpression(String), (Expression) parseExpression(String, ParserContext)两个接口方法 |
ParserContext | 解析器上下文接口,主要是对解析器Token的抽象类,包含3个方法:getExpressionPrefix,getExpressionSuffix和isTemplate,就是表示表达式从什么符号开始什么符号结束,是否是作为模板(包含字面量和表达式)解析。一般保持默认。 |
Expression | 表达式的抽象,是经过解析后的字符串表达式的形式表示。通过expressionInstance.getValue方法,可以获取表示式的值。也可以通过调用getValue(EvaluationContext),从评估(evaluation)上下文中获取表达式对于当前上下文的值 |
EvaluationContext | 估值上下文接口,只有一个setter方法:setVariable(String, Object),通过调用该方法,可以为evaluation提供上下文变量 |
public static void main(String[] args){
//1.定义一个hashMap,put三个key的value
HashMap hashMap = new HashMap();
hashMap.put(1,10);
hashMap.put(3,2);
hashMap.put(5,12);
//2.测试SpringEL解析器
//3.设置文字模板,其中#{}表示表达式的起止,#t是表达式字符串,表示引用一个变量。
String template = ("#{[5]==12 and [3]>=2}").replaceAll("\\[", "#t[");
//4.创建表达式解析器
ExpressionParser paser = new SpelExpressionParser();
//5.通过evaluationContext.setVariable可以在上下文中设定变量。
EvaluationContext context = new StandardEvaluationContext();
context.setVariable("t",hashMap);
//6.解析表达式,如果表达式是一个模板表达式,需要为解析传入模板解析器上下文。
Expression expression = paser.parseExpression(template,new TemplateParserContext());
//7.使用Expression.getValue()获取表达式的值,这里传入了Evalution上下文,第二个参数是类型参数,表示返回值的类型。
System.out.println(expression.getValue(context,String.class));
}