Spring表达式语言:SpEL
Spring表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。语法类似于EL:SpEL使用#{...}作为定界符,所有在大框号中的字符都将被认为是SpEL。SpEL为bean的属性进行动态赋值提供了便利。
通过SpEL可以实现:
- 通过bean的id对bean进行引用
- 调用方法以及引用对象中的属性
- 计算表达式的值
- 正则表达式的匹配
SpEl:字面值
整数:value="#{5}"
小数:value="#{89.7}"
科学计数法:value="#{1e4}"
String可以使用单引号或者双引号作为字符串的定界符号:value="#{'ABC'}"或value='#{"ABC"}'
value="#{false}"
SpEL支持的运算符号
1.算数运算符:+,-,*,/,%,^
2.+还可以用作字符串连接
3.比较运算符:<,>,==,<=,>=,lt,gt,eq,le,ge
4.逻辑运算符:and,or,not
5.if-else运算符:表达式1?表达式2:表达式3
6.正则表达式: matches
下面代码给出了一些实例
I.通过bean的id对bean进行引用,使用#{bean的id}
<bean id="car" class="com.spring.c1.Car" p:type="BMW"></bean>
<bean id="person1" class="com.spring.c1.Person" p:name="Tom" p:age="10" p:car="#{car}"></bean>
II.引用对象中的属性,使用#{bean的ID.属性}
<bean id="car" class="com.spring.c1.Car" p:type="BMW"></bean>
<bean id="person1" class="com.spring.c1.Person" p:name="Tom" p:age="10" p:car="#{car}"></bean>
<bean id="person2" class="com.spring.c1.Person" p:name="Jack" p:age="20" p:car="#{person1.car}"></bean>
III.调用方法,如下代码所示,调用String类型的toUpperCase()方法
<bean id="car" class="com.spring.c1.Car" p:type="BMW"></bean>
<bean id="person1" class="com.spring.c1.Person" p:name="tom" p:age="10" p:car="#{car}"></bean>
<bean id="person2" class="com.spring.c1.Person" p:name="#{person1.name.toUpperCase()}" p:age="20" p:car="#{person1.car}"></bean>
IV. 计算表达式的值,
如下代码所示p:age="#{person1.age+20},计算person1的age属性+10
<bean id="car" class="com.spring.c1.Car" p:type="BMW"></bean>
<bean id="person1" class="com.spring.c1.Person" p:name="tom" p:age="10" p:car="#{car}"></bean>
<bean id="person2" class="com.spring.c1.Person" p:name="#{person1.name.toUpperCase()}" p:age="#{person1.age+20}" p:car="#{person1.car}"></bean>
V.正则表达式的匹配,下面代码用于匹配手机号码
value="#{phonenumber matches '^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$'}"