Spring 表达式语言 (SpEL)

Spring 表达式语言(简称“SpEL”)是一种强大的表达式语言,它支持在运行时查询和操作对象图。该语言语法类似于 Jakarta 表达式语言,但提供了额外的功能,最显著的是方法调用和基本的字符串模板功能。

虽然还有其他几种可用的 Java 表达式语言——例如 OGNL、MVEL 和 JBoss EL——但创建 Spring 表达式语言的目的是为了给 Spring 社区提供一个单一的、受良好支持的表达式语言,可以在 Spring 产品组合中的所有产品中使用。其语言功能由 Spring 产品组合中项目的需求驱动,包括 Spring Tools for Eclipse 中代码完成支持的工具需求。也就是说,SpEL 基于一种与技术无关的 API,如果需要,可以集成其他表达式语言实现。

虽然 SpEL 是 Spring 产品组合中表达式评估的基础,但它不直接与 Spring 绑定,可以独立使用。为了自成一体,本章中的许多示例都将 SpEL 视为独立的表达式语言。这需要创建一些引导基础设施类,例如解析器。大多数 Spring 用户不需要处理这个基础设施,而是只需编写表达式字符串进行评估。这种典型用法的一个例子是将 SpEL 集成到创建基于 XML 或注解的 bean 定义中,如 定义 bean 定义的表达式支持 所示。

本章涵盖了表达式语言的特性、其 API 及其语言语法。在多个地方,InventorSociety 类被用作表达式评估的目标对象。这些类的声明和用于填充它们的数据列在本章末尾。

表达式语言支持以下功能:

  • 字面量表达式

  • 访问属性、数组、列表和映射

  • 内联列表

  • 内联映射

  • 数组构造

  • 关系运算符

  • 正则表达式

  • 逻辑运算符

  • 字符串运算符

  • 数学运算符

  • 赋值

  • 类型表达式

  • 方法调用

  • 构造函数调用

  • 变量

  • 用户定义函数

  • Bean 引用

  • 三元、Elvis 和安全导航运算符

  • 集合投影

  • 集合选择

  • 模板表达式