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 和语言语法。在很多地方,Inventor
和 Society
类被用作表达式求值的 target 对象。这些类的声明以及用于填充它们的数据列在本章的末尾。
表达式语言支持以下功能:
-
文字表达式
-
访问属性、数组、列表和映射
-
内联列表
-
内联映射
-
数组构造
-
关系运算符
-
正则表达式
-
逻辑运算符
-
字符串运算符
-
数学运算符
-
赋值
-
类型表达式
-
方法调用
-
构造函数调用
-
变量
-
用户定义函数
-
Bean 引用
-
三元运算符、Elvis 运算符和安全导航运算符
-
集合投影
-
集合选择
-
模板表达式