Spring Expression Language 简明教程

Spring SpEL - EvaluationContext

EvaluationContext 是 Spring SpEL 的一个接口,它用于在上下文中执行一个表达式字符串。在表达式评估过程中遇到的引用将在该上下文中解析。

Syntax

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

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

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

Mahesh

此处的结果是在员工对象 Mahesh 的字段 name 的值。StandardEvaluationContext 类指定了评估表达式的对象。 StandardEvaluationContext在上下文对象创建后无法更改。它缓存状态,并允许快速执行表达式评估。以下示例显示各种用例。

Example

以下示例显示一个类 MainApp。

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

  1. Employee.java − Employee class.

  2. 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
   }
}

Output

Mahesh
Rita
false
true