Spring SpEL 基础用法示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/andy_zhang2007/article/details/84947114

例子源代码

package tut.zero;

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;

/**
 * SpEL 基础用法示例
 */
public class SpELPrimeUseTest {


    public static void main(String[] args) {
        // 1. 提供待评估(求值)的表达式字符串
        String expressionString = "('Hello' + ' World').concat(#end)";

        // 2. 指定将要使用的表达式分析器
        ExpressionParser parser = new SpelExpressionParser();

        // 3. 分析表达式字符串
        Expression expression = parser.parseExpression(expressionString);

        // 4. 构建表达式评估(求值)上下文环境,也需要指定环境中相关的变量
        EvaluationContext context = new StandardEvaluationContext();
        context.setVariable("end", "!");

        // 5. 指定要将表达式评估(求值)结果对象转换成的目标类型,
        // 这个例子中使用了字符串
        Class<String> desiredResultType = String.class;

        // 6. 表达式评估(求值)并转换成指定类型
        String value = expression.getValue(context, desiredResultType);

        // 输出最终结果
        System.out.println("Result value is : " + value);
    }
}

基础使用步骤介绍

上面例子演示的使用方法和步骤虽然简单,但却是最基本的,不管是Spring framework的内部使用,如@Value最终的SpEL解析,还是开发人员使用,都逃不开此基本流程。所以这里做一总结梳理以备参考。

1. 提供待评估(求值)的表达式字符串

例子 :

       String expressionString = "('Hello' + ' World').concat(#end)";

该例子直接给出了一个简单的表达式字符串,实际应用中,包括在Spring framework内部使用的时候,表达式字符串可能来自很多渠道,也可能很复杂,甚至包含对bean的引用。但是不管怎样,要交给表达式解析器的,都最终会是一个表达式字符串。

2. 指定将要使用的表达式分析器

例子 :

        ExpressionParser parser = new SpelExpressionParser();

3. 分析表达式字符串

例子 :

        Expression expression = parser.parseExpression(expressionString);

解析所提供的表达式字符串,如果解析遇到问题,抛出异常ParseException。如果成功返回一个Expression对象供随后求值评估使用。

4. 构建表达式评估(求值)上下文环境,也需要指定环境中相关的变量

例子 :

        EvaluationContext context = new StandardEvaluationContext();
        context.setVariable("end", "!");

这里使用了一个StandardEvaluationContext作为评估/求值上面例子表达式的EvaluationContext评估上下文。StandardEvaluationContext是一个功能强大,可以高度配置的EvaluationContext,它基于反射解析属性,方法和成员字段。

而对于简单一些的求值/评估,可以使用一个较为简单的EvaluationContext:SimpleEvaluationContext。它的求值/评估能力是SpEL功能的一个子集,主要用于一些数据绑定场景的条件求值。比如它不支持包含Java类型,
构造函数和bean引用的表达式。

5. 指定要将表达式评估(求值)结果对象转换成的目标类型

例子 :

	// 这个例子中使用了字符串
       Class<String> desiredResultType = String.class;

也可以不指定目标类型,如果不指定,结果会是Object类型。

6. 表达式评估(求值)并转换成指定类型

例子 :

 String value = expression.getValue(context, desiredResultType);

猜你喜欢

转载自blog.csdn.net/andy_zhang2007/article/details/84947114