SpEL总结

SpEL
全称:Spring Expression Language (Spring 表达式语言)
定义:SpEL 是 Spring 定义的一套在 Spring 框架内运行的表达式语言,说是语言,理解为通过特定格式的字符串来让 Spring 框架解析出原来的含义,可简化很多对数据的操作动作。后端类似的有 OGNL, MVEL 和 JBoss EL。

 

SpEL 大致功能

  • 简单字符
  • boolean值 与关系运算符支持
  • 常用表达式
  • 类表达式
  • 访问 properties, arrays, lists, maps
  • 方法调用
  • 关系运算符支持
  • 任务
  • 调用构造函数
  • Bean 引用
  • 构造数组
  • 单行配置 list
  • 单号配置 map
  • 三元运算符
  • 变量
  • 用户自定义函数
  • Collection projection
  • Collection selection
  • 模板表达式

简单案例
基础字符串语法解析
解析字符串声明语句 'Hello World' 得到字符串 Hello World
解析字符串拼接语句 'Hello World'.concat('!') 得到字符串 Hello World!

ExpressionParser parser = new SpelExpressionParser();
        Expression exp = parser.parseExpression("'Hello World'");
        String message = (String) exp.getValue();
        assert message.equals("Hello World");
        exp = parser.parseExpression("'Hello World'.concat('!')");
        message = (String) exp.getValue();
        assert message.equals("Hello World!");
        exp = parser.parseExpression("'Hello World'.bytes.length");
        assert exp.getValue().equals(11);

EvaluationContext 接口
相关实现
当 Spring 处理 SpEL 的时候会通过这个接口解析属性,方法或字段。Spring 为该接口提供了两个实现:
SimpleEvaluationContext
简单实现:旨在仅支持 SpEL 语言语法的一个子集。它不包括 Java 类型引用、构造函数和 bean 引用。使用它明需要确选择对表达式中的属性和方法的支持级别。默认情况下,create()静态工厂方法只允许对属性进行读取访问。可以通过获得构建器来配置所需的确切支持级别,针对以下一项或某种组合:
唯一的自定义属性访问器
只读数据绑定
允许读写的数据绑定
StandardEvaluationContext
标准实现:支持所有的 SpEL 语言特性和配置选项。可以使用它来指定默认根对象并配置所有的的 evaluation-relate 策略。基于 StandardEvaluationContext 还有两种实现 MethodBasedEvaluationContext、CacheEvaluationContext。
类型转换
默认情况下:Spring 解析 SpEL 的时候会使用自身 org.springframework.core.convert.ConversionService 包中可用的转换器服务。而且由于 SpEL 是能泛型感知的,当解析数据时,会尝试将其以正确的泛型来进行解析,下面是一个字符串 "false" 解析成布尔值 false 的简单案例

 

参考文档:

https://blog.csdn.net/qq_21579619/article/details/123078778
https://www.cnblogs.com/listjiang/p/15797033.html

 

posted @ 2022-08-15 14:25  郭慕荣  阅读(255)  评论(0编辑  收藏  举报