Spring3表達式語言(SpEL)學習筆記

最新地址請訪問:http://leeyee.github.io/blog/2011/06/19/spring-expression-language

Spring Excpression Language (SpEL)語言支持在運行時操作和查詢對象,其語法類似統一的EL語言,但是SpEL提供了額外的功能。

1、文本表達式
2、布爾類和關係操作
3、正則表達式
4、類表達式
5、訪問屬性、數組、集合和map
6、方法調用
7、關係操作
8、賦值操作
9、調用構造函數
10、Bean 引用
11、數組構造
12、內聯list
13、三元操作
14、變量
15、用戶自定義函數
16、集合投影
17、集合選擇
18、模板表達式


使用SpEl進行表達式操作,基本操作如下:
第一步,構建解析
第二步,使用表達式進行解析
第三步,獲取結果 

2.1 文本表達式
文本表達式支持字符表達式、日期、數字(正數、實數及十六進制數)、布爾類型及null.其中字符表達式需要用單引號聲明。
對數字支持負數、指數及小數。默認情況下實數使用Double.parseDouble() 進行表達式類型轉換

2.2 屬性、數組、列表、字典(map)及索引
在表達式中訪問類屬性時直接使用屬性名,屬性名首字母大小寫均可。
訪問數組時可以使用[index]進行元素對象範圍。
訪問列表時,可直接使用類表的方法,通過點操作符

2.3 內置列表
列表可以直接表示在表達式中使用{}符號表達。{}本身代表一個空的list

2.4 數組構造(spring3.0.3中會拋出異常)
可以通過熟悉的java語法在表達是語言中定義。但目前不支持定義一個初始化的多維數組
2.5 方法
表達式中的方法調用遵循java語法。

2.6 操作符
2.6.1 關係操作符

支持 eq("=="),ne("!="),le("<="),lt("<"),gt(">"),ge(">="),div("/"),mod("%"),not("!"),正則表達式及instanceof操作             
2.6.2 邏輯操作符
邏輯操作符支持and,or,not

2.6.3 數學運算操作符
加法運算符可以用於數字,字符串和日期。減法可以用在數字和日期。乘法和除法只能用於對數字。其他受支持的數學運算是模數(%)和指數冪(^)。運行順序按標準運算符優先級執行
2.7 賦值
通過賦值操作進行屬性設置。通常是調用setValue方法,但也可以在調用getValue時設置。

2.8 類型
通過特殊的'T'操作符可以用來指定一個java.lang.Class的實例。在實例話對象的靜態方法將會被調用。

2.9 構造器
構造器通過new操作被調用。在new操作時需要指明類的完全類名(包括包路徑)

2.10 變量
變量可以通過 #變量名 在表達式中被引用。變量通過StandardEvaluationContext類的setVariable方法進行設置
2.10.1 #this變量
變量 #this 被定義爲當前操作對象的引用。

2.11 函數
你可以擴展SpEL通過註冊自定義函數。註冊後的函數可以在表達式中通過其名稱進行調用。函數的註冊是通過StandardEvaluationContext類的registerFunction方法進行聲明
2.12 三元操作

2.13 Elvis操作

Elvis操作是一個短的三元操作符語法,通常在Groovy語言中使用。

Note: Elvis操作在表達式中可以用來生成默認值,當被訪問屬性爲空時。比如@Value

@Value("#systemPro['mail.port'] ? : 25}")  //當mail.port爲空時將默認爲25

2.14 安全導航操作
該操作是爲避免空指針異常。他是來自Groovy語言的。典型的當你有一個指向對象的引用,在你訪問其方法或屬性時,可能需要驗證該對象的方法或屬性是否爲空,爲了避免驗證,使用安全導航操作將簡單的返回null而不是空指針異常。
2.15 集合選擇
選擇是一個強大的表達式語言屬性,可以使用選擇表達式過濾源集合,從而生成一個新的符合選擇條件的集合
選擇的語法爲 ?[selectionExpression] 。他將過濾集合並且返回一個新的集合(原集合的子集)。
選擇語句也可用在Map中,過濾keySet及valueSet分別使用key和value關鍵字
另外:選擇語法中,選擇符合條件的結果集的第一個元素的語法爲 ^[selectionExpression],選擇最後一個元素的語法爲$[selectionExpression]
2.16 集合投影
語法 ![projectionExpression] 判斷集合中每個元素是否符合語法要求

2.17 表達式模板
表達式模板允許混合文字表達式,一個或多個值計算塊。每一個值計算塊被聲明通過可被自定義的前綴和後綴,一般選擇使用 #{}作爲一個定界符。

------------    以上就是SpEL的簡單介紹。下面直接給出測試用例,這樣比較直觀,也易於理解。    ------------

pom.xml 

spring-beans.xml

ApplicationContextFactory.java

SpElUtil.java

SpElUtilTest.java

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章