SpEL中 Expression 的使用


        ExpressionParser expressionParser = new SpelExpressionParser();
        //表达式
        Expression expression1 = expressionParser.parseExpression("#Date");
        //执行 使用默认的 spring容器
        System.out.println(expression1.getValue());
        //使用自定义容器
        EvaluationContext evaluationContext = new StandardEvaluationContext();
        evaluationContext.setVariable("Date","2020-10-14");
        //spel表达式 在指定的执行计算结果
        System.out.println(expression1.getValue(evaluationContext,String.class));

ExpressionParser  通过   new SpelExpressionParser()  创建SpEL解析器

parseExpression("表达式") 会返回一个 Expression 

Expression 就代表一个SpEL表达式 getValue():执行表达式结果

有多个重载方法

getValue() returen Object  是在 默认容器也就是 ApplicationContext中的计算结果

我们也可以 指定 自定义容器 在自定义容器中获取计算结果 使用getValue(EvaluationContext,class);

EvaluationContext 创建其子类 new StandardEvaluationContext() 创建自定义容器 

evaluationContext.setVariable(key,value);指定容器环境  

如上面测试代码 

表达式 #Date  就会取到 自定义容器的 Date 对应值 2020-10-14 转换成 String 输出 2020-10-14

而 默认容器 getValue() 执行结果 就为 null

SpEL 的使用场景很多 记录 我在项目中的一个使用场景  

AOP 切 注解 记录 日志 

    @DateLog(date = "#date")
    public void extractData(Date date)

上面代码中  #date 就是一个SpEL  会获取到 传入参数 date的值  

AOP

通过 Expression 解析 表达式的 '#date'  执行相应逻辑

你可能感兴趣的:(spring,java,spring)