Spring 表达式语言 (SpEL)
Spring 表达式语言(简称 “SpEL”)是一种功能强大的表达式语言,它支持在运行时查询和操作对象图。该语言语法类似于 Jakarta Expression Language,但提供了额外功能,其中最值得注意的是方法调用和基本的字符串模板功能。虽然还有其他一些 Java 表达式语言可用——比如 OGNL、MVEL 和 JBoss EL——创建 Spring 表达式语言是为了向 Spring 社区提供一个可以在 Spring 产品组合的所有产品中使用的、受到良好支持的单一表达式语言。其语言功能由 Spring 产品组合中项目的需求驱动,包括 Spring Tools for Eclipse 中代码完成支持的工具需求。尽管如此,SpEL 是基于技术无关的 API,该 API 允许集成其他表达式语言实现,如果需要的话。虽然 SpEL 作为 Spring 产品组合中表达式评估的基础,但它并未直接绑定到 Spring,并且可以独立使用。为了自包含,本章中的许多示例都将 SpEL 作为独立表达式语言来使用。这需要创建一些引导基础设施类,例如解析器。大多数 Spring 用户无需处理此基础设施,而是只需编写表达式字符串进行评估即可。这种典型用途的一个示例是将 SpEL 集成到创建 XML 或基于注解的 bean 定义中,如 定义 Bean 定义的表达式支持 中所示。
虽然有其他几种 Java 表达式语言可用——例如 OGNL、MVEL 和 JBoss EL——但创建 Spring Expression Language (SpEL) 是为了向 Spring 社区提供一个受到良好支持的统一表达式语言,可以在 Spring 产品组合的所有产品中使用。它的语言特性由 Spring 产品组合中项目的需求驱动,包括在 Spring Tools for Eclipse 中代码补全支持的工具需求。话虽如此,SpEL 基于一个技术无关的 API,该 API 允许集成其他表达式语言实现(如果需要的话)。
虽然 SpEL 在 Spring 产品组合中作为表达式求值的基础,但它不直接绑定到 Spring,并且可以独立使用。为了自包含,本章中的许多示例都将 SpEL 就像它是一个独立的表达式语言一样使用。这需要创建一些引导性基础设施类,例如解析器。大多数 Spring 用户无需处理这些基础设施,而只需编写用于求值的表达式字符串。这种典型用法的一个例子是将 SpEL 集成到创建基于 XML 或注解的 bean 定义中,如 定义 bean 定义的表达式支持 中所示。
本章涵盖了表达式语言的功能、其 API 及其语言语法。在多个地方,Inventor
和 Society
类被用作表达式评估的目标对象。这些类的声明以及用于填充它们的数据列在本章末尾。
表达式语言支持以下功能:
-
字面量表达式
-
访问属性、数组、列表和映射
-
内联列表
-
内联映射
-
数组构建
-
关系运算符
-
正则表达式
-
逻辑运算符
-
字符串运算符
-
数学运算符
-
赋值
-
类型表达式
-
方法调用
-
构造函数调用
-
变量
-
用户定义函数
-
Bean 引用
-
三元、Elvis 和安全导航运算符
-
集合投影
-
集合选择
-
模板化表达式