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