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 及其語言語法。在多個地方,InventorSociety 類被用作表示式評估的目標物件。這些類的宣告以及用於填充它們的資料列在本章末尾。

表示式語言支援以下功能:

  • 字面量表達式

  • 訪問屬性、陣列、列表和對映

  • 內聯列表

  • 內聯對映

  • 陣列構建

  • 關係運算符

  • 正則表示式

  • 邏輯運算子

  • 字串運算子

  • 數學運算子

  • 賦值

  • 型別表示式

  • 方法呼叫

  • 建構函式呼叫

  • 變數

  • 使用者定義函式

  • Bean 引用

  • 三元、Elvis 和安全導航運算子

  • 集合投影

  • 集合選擇

  • 模板化表示式