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']}
.^[]”和“.$[]”,它们分别用来在集合中查询第一个匹配项和最后一个匹配项
投影运算符( .![]),它会从集合的每个成员中选择特定的属性放到另外一个集合中