最近在學習《Spring實戰》一書的過程中發現Spring中的表達式SpEL的應用範圍還是很廣泛的,特意整理一下SpEL的用法如下:
首先,說一說SpEl表達式支持的特性有:
使用Bean的ID來引用Bean;
調用方法和訪問對象的屬性;
對值進行算術、關係和邏輯運算;
正則表達式匹配;
集合操作;
1、引用Bean和訪問Bean的屬性略過,以下是訪問Bean的方法:
<property name = "song" value = "#{songSelector.selectSong()}"/>
2、通過使用T()運算符調用類作用域的方法
<property name = "multiplier" value = "#{T(java.lang.Math).PI}"/>
<property name = "randomNumer" value = "#{T(java.lang.Math).random()"/>
pEL支持所有java基礎算術運算符,還支持^運算符進行乘方運算
4、SpEL支持比較運算符和其文本替代方式:
<property name = "hasCapacity" value = "#{counter.total le 10000}" />
le 即小於等於。類似還有,eq (==),lt(<),gt(>),ge(>=)
5、SpEL對正則表達式的支持
<property name = "validEmail" value = "#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.com'}"/>
6、對集合的操作
通過索引訪問集合:
<property name = "chosenCity" value = "#{cities[2]}"/>
訪問.properties配置文件所聲明集合中的屬性:
<util:properties id = "settings" location = "classpath:settings.properties"/>
<property name = "accessToken" value = "{settings['twitter.accessToken']}"/>
訪問systemEnvironment和systemProperties:
systemEnvironment包含應用程序所在機器上的所有環境變量。
systemProperties包含了Java應用程序啓動時所設置的所有屬性。
示例:
<property name = "homePath" value = "#{systemEnvironment['HOME']}" />
<property name = "homePath" value = "#{systemProperties['application.home']}"/>
查詢集合成員
利用” . ?[ ] “運算符查詢滿足條件的集合成員:
<property name = "bigCities" value = "#{cities.?[population gt 100000]}" />
同樣還有“ . ^[ ] ”查詢第一個匹配項和 “ . $[ ] ”查詢最後一個匹配項
投影集合
集合投影是從集合的每一個成員中選擇特定的屬性放入一個新的集合中,
利用SpEL的投影運算符“ .![ ] ”可以實現集合投影。
<property name = "cityNames" value = "#{cities.![name]}" />