📜  Spring – SpEL 中的变量

📅  最后修改于: 2022-05-13 01:55:33.485000             🧑  作者: Mango

Spring – SpEL 中的变量

EvaluationContext 接口由 StandardEvaluationContext 类实现。为了解析属性或方法,它采用了反射技术。 StandardEvaluationContext 上的方法 setVariable 可用于设置变量。使用符号#variableName,我们可以在表达式中使用这个变量。

我们可以在变量中放入一个值,然后使用该变量调用方法。我们必须利用 StandardEvaluationContext 类与变量进行交互。

虽然有各种可供选择的Java表达式语言,例如 OGNL、MVEL 和 JBoss EL,但 Spring 表达式语言的建立是为了向 Spring 社区提供一种受良好支持的单一表达式语言,可以在整个 Spring 产品组合中使用。该语言的特性取决于 Spring 产品组合项目的需求,包括基于 Eclipse 的 Spring Tool Suite 中代码完成辅助的工具需求。也就是说,SpEL 基于技术中立的 API,允许在需要时添加替代表达式语言实现。

SpEL是 Spring 产品组合中表达式评估的基础,但是,它与 Spring 无关,可以独立使用。本章中的许多示例都使用 SpEL,就好像它是一种独立的表达语言,以便自包含。这需要创建一些基础结构类,例如解析器。大多数 Spring 用户将避免处理此基础结构,而是专注于编写表达式字符串以进行评估。将 SpEL 集成到 XML 或基于注释的 bean 定义的创建中,如定义 bean 定义的表达式支持部分所示,就是这种常见用途的一个示例。

SpEL的特点

  1. 字面量表达
  2. 布尔和关系运算符
  3. 常用表达
  4. 类表达式
  5. 访问属性、数组、列表、映射
  6. 方法调用
  7. 关系运算符
  8. 任务
  9. 调用构造函数
  10. Bean 引用
  11. 数组构造
  12. 内联列表
  13. 内联地图
  14. 三元运算符
  15. 变量
  16. 用户自定义函数
  17. 收藏投影
  18. 收藏选择
  19. 模板化表达式

句法:

context.setVariable("newName", "Geeksforgeeks");

执行:

我们将通过以下两个列出的文件进行演示:

  1. 乘法。 Java - 乘法类。
  2. 测试。 Java - 运行和测试的主要应用程序。

A. 文件:乘法。Java

Java
// Java Program to Illustrate MultiplicationTest Class
 
// Class
public class MultiplicationTest {
    // Class data members
    int num1;
    int num2;
 
    // Getter
    public int getNum1() { return num1; }
 
    // Setter
    public void setNum1(int num1)
    {
        // this keyword refers to current
        // instance itself
        this.num1 = num1;
    }
 
    // Getter
    public int getNum2() { return num2; }
 
    // Setter
    public void setNum2(int num2) { this.num2 = num2; }
 
    // Method
    // To multiply two numbers
    public int multiplication() { return num1 * num2; }
}


Java
// Java Program to Illustrate Spring SPEL Variable Example
 
// Importing required classes
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
 
// Class
public class Test {
 
    // Main driver method
    public static void main(String args[])
    {
        // Creating MultiplicationTest object.
        MultiplicationTest multiplicationTest
            = new MultiplicationTest();
 
        // Creating StandardEvaluationContext object
        // with MultiplicationTest object.
        StandardEvaluationContext context
            = new StandardEvaluationContext(
                multiplicationTest);
 
        // Creating  a parser with default settings.
        ExpressionParser parser
            = new SpelExpressionParser();
 
        // Setting variables values
        parser.parseExpression("num1").setValue(context,
                                                "30");
        parser.parseExpression("num2").setValue(context,
                                                "30");
 
        // Calculate result
        System.out.println(
            multiplicationTest.multiplication());
    }
}


B. 文件:测试。Java

Java

// Java Program to Illustrate Spring SPEL Variable Example
 
// Importing required classes
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
 
// Class
public class Test {
 
    // Main driver method
    public static void main(String args[])
    {
        // Creating MultiplicationTest object.
        MultiplicationTest multiplicationTest
            = new MultiplicationTest();
 
        // Creating StandardEvaluationContext object
        // with MultiplicationTest object.
        StandardEvaluationContext context
            = new StandardEvaluationContext(
                multiplicationTest);
 
        // Creating  a parser with default settings.
        ExpressionParser parser
            = new SpelExpressionParser();
 
        // Setting variables values
        parser.parseExpression("num1").setValue(context,
                                                "30");
        parser.parseExpression("num2").setValue(context,
                                                "30");
 
        // Calculate result
        System.out.println(
            multiplicationTest.multiplication());
    }
}

输出:

600