Spring SpEL - EvaluationContext

EvaluationContext 是 Spring SpEL 的一个接口,它有助于在上下文中执行表达式字符串。 在表达式评估期间遇到引用时,将在此上下文中解析引用。


语法

以下是创建 EvaluationContext 并使用其对象获取值的示例。

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'name'");
EvaluationContext context = new StandardEvaluationContext(employee);
String name = (String) exp.getValue();

它应该按如下方式打印结果:

Mahesh

这里的结果是员工对象的名称字段的值,Mahesh。 StandardEvaluationContext 类指定评估表达式所针对的对象。 一旦创建了上下文对象,就无法更改 StandardEvaluationContext。 它缓存状态并允许快速执行表达式评估。 以下示例显示了各种用例。


示例

以下示例显示了一个类 MainApp

让我们更新在 Spring SpEL - 创建项目 章节中创建的项目。 我们正在添加以下文件 −

  • Employee.java − 员工类。

  • MainApp.java − 要运行和测试的主应用程序。

这是 Employee.java 文件的内容 −

实例


package com.tutorialspoint;

public class Employee {
   private String id;
   private String name;
   public String getId() {
      return id;
   }
   public void setId(String id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

这是 MainApp.java 文件的内容 −

实例


package com.tutorialspoint;

import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

public class MainApp {
   public static void main(String[] args) {
      Employee employee = new Employee();
      employee.setId(1);
      employee.setName("Mahesh");

      ExpressionParser parser = new SpelExpressionParser();
      EvaluationContext context = new StandardEvaluationContext(employee);
      Expression exp = parser.parseExpression("name");
      
      // evaluate object using context
      String name = (String) exp.getValue(context);
      System.out.println(name);

      Employee employee1 = new Employee();
      employee1.setId(2);
      employee1.setName("Rita");

      // evaluate object directly
      name = (String) exp.getValue(employee1);
      System.out.println(name);
      exp = parser.parseExpression("id > 1");
      
      // evaluate object using context
      boolean result = exp.getValue(context, Boolean.class);
      System.out.println(result);  // evaluates to false

      result = exp.getValue(employee1, Boolean.class);
      System.out.println(result);  // evaluates to true
   }
}

输出

Mahesh
Rita
false
true