總結自:www.jianshu.com/p/61f7c6fe03ec
SpEL是一種表達式語言,可以與spring應用程序運行時的對象交互,可簡化開發,減少一些邏輯、配置的編寫。
既能在配置文件中使用,也能在注解中使用(常用於@Value等)。
備注:SpEL都是#{}的格式
字面值
整數
#{5}
浮點數
#{3.1415}
科學計數法
#{9.87E4}
字符串(使用單引號/雙引號,皆可)
#{'hello'} 或 #{"hello"}
boolean值
#{true}
引用Bean並使用其屬性與方法
通過ID引用bean
#{a} //a為bean的id
使用bean的屬性
#{a.b}
使用bean的方法
#{a.c()}
可鏈式調用
#{a.c().toUpperCase()}
通過.?(類型安全的運算符)避免空指針(NullPointerException)
#{a.c()?.toUpperCase()}
即:a.c()存在時才使用toUpperCase()
備注:?.不是三元運算符
使用類類型
即:通過T()可以訪問類作用域的方法和常量的話
通過T()獲取常量
#{T(java.lang.Math).PI}
通過T()獲取方法
#{T(java.lang.Math).random()}
運算符
計算符,如*、+、-...
#{T(java.lang.Math).PI*circle.r^2}
比較運算符
#{a.b==100}
#{a.b eq 100}
三元運算符
#{scoreboard.score > 1000 ? "winner" : "loser"}
正則表達式
#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9._%+-]+\\.com'}
集合
通過[]引用集合中的一個元素
#{jukebox.song[4].title}
備注:[]也可用於字符串
如:#{'this is a test' [3]}
重點:
集合運算符
.?[](查詢運算符)對集合過濾
#{jukebox.songs.?[artist eq 'Aerosmith']}
.^[]”和“.$[]”,它們分別用來在集合中查詢第一個匹配項和最后一個匹配項
投影運算符( .![]),它會從集合的每個成員中選擇特定的屬性放到另外一個集合中