一. SpringEL表达式的简介
Spring的表达式语言,简称SpELl,是一个支持运行时检查和操作对象图的强大的表达式语言,和我们之前学习过的JSP中的EL表达式类似,SPEL使用的是#{}作为定界符,所有在大括号中的字符都被认为的SPEL,SPEL为bean的属性进行动态赋值提供了非常大的便利,通过SPEL可以实现:
- 通过bean的ID对bean进行引用,类似于 ref标签,比ref更强大
- 可以调用方法以及引用对象的属性
- 可以进行计算(数学运算、比较运算、逻辑运算、三目运算等)
- 支持正则表达式
体验SpringEL:
<bean id="car" class="com.nhkj.spel.Car">
<property name="brand" value="Audi"></property>
<property name="color" value="red"></property>
<property name="maxSpeed" value="200"></property>
<property name="price" value="300000"></property>
<!-- 通过SPEL表达式可以获得类中的常量
求周长 -->
<property name="perimeter" value="#{T(java.lang.Math).PI*60}"></property>
</bean>
<bean id="car2" class="com.nhkj.spel.Car">
<property name="brand" value="Chery"></property>
<property name="color" value="red"></property>
<property name="maxSpeed" value="200"></property>
<property name="price" value="100000"></property>
<!-- 通过SPEL表达式可以获得类中的常量 -->
<property name="perimeter" value="#{T(java.lang.Math).PI*60}"></property>
</bean>
<bean id="person" class="com.nhkj.spel.Person">
<property name="car" ref="car2"></property>
<property name="name" value="zwj"></property>
<!-- 使用了三目运算符和关系运算 -->
<property name="level" value="#{car2.price >= 300000?'金领':'白领'}"></property>
</bean>
二. SpringEL的使用
-
SPEL表达式可以使用字面量(意义不大),字面量仅限于字符串、基本数据类型
-
引用bean、属性、方法
-
SPEL支持数学运算(加减乘除取模)
-
SPEL支持关系运算
< 、>、 <=、 >=、 ==、 != 所有的关系运算结果 是boolean类型
-
SPEL支持逻辑运算:xml中支持使用&& 表示并且,||表示或者,!表示非,但是不推荐使用,推荐使用效果相同的and,or,not
and(&&) 表示并且,连接多个boolean类型的运算符
or(||) 表示或者,连接多个boolean类型的运算符
not(!) 表示非,后面跟上一个boolean类型的运算符
-
SPEL支持三目运算符
-
SPLE支持正则表达式
<!-- 使用正则判断 -->
<property name="email" value="#{car3.getBrand() matches '\w{3,5}@\w{3,8}.(com|cn)'}"></property>
- SPEL支持调用静态属性和静态方法
<property name="price" value="#{T(java.lang.Math).round(100000.53452345234)}"></property>
小结
SpringEL表达式操作类似于jsp中的EL表达式,使用#{}作为定界符,可以进行一些常用的操作。