Spring表达式语言,简称SpEL,是一个支持运行时查询和操作对象图的强大的表达式语言。语法类似于EL:SpEL使用#{…}作为定界符,所有在大括号中的字符都将被认为是SpEL
SpEL为bean属性进行动态赋值提供了便利
通过SpEL可以实现:
通过bean的id对bean进行引用
调用方法及引用对象中的属性
计算表达式的值
正则表达式的匹配
如果我们要为基本类型或者String类型赋值,我们也可以用SpEL:
整数:
科学计数法:
String可以使用单引号或者双引号作为字符创的定界符号:
或者我们也可以这么写:
布尔类型"
我们这里只是说可以用,瞅着都知道这个很麻烦(ಥ_ಥ)还不如直接赋值,大家知道有这回事就行。
当然我们也可以拿这玩意引用其他对象:
这里相当于用了ref属性
也可以用来引用其他对象的属性,这种操作我们是无法通过普通操作完成的:
SpEL还可以调用其他方法,还可以链式操作,真的可以骚上天:
其他还有很多丰富的其他功能:
算数运算符:+、-、*、/、%、^
加号还可以用作字符创链接
比较运算符、==、<=、>=、lt、gt、eq、le、ge
逻辑运算符and、or、not、|
if-else运算符
正则表达式matches
调用静态方法或者静态属性T()
可以看出SpEL是块非常庞大的内容,我们需要花很久才能将它真正掌握,这里我就提一些比较常用的功能。
先做一下准备工作,先写一下新的JavaBean:
Car.java
privateString brand;
privatedoubleprice;
//轮胎周长
privatedoubletyrePerimeter;
Person.java
privateString name;
//引用address bean的city属性
privateString city;
privateCar car;
//根据car的price确定info
//car的price>=3000000:经理
//否则为白领
privateString info;
Address.java和之前的一样,接下来来写配置文件beans-spel.xml
SpEL赋字面量的值
SpEL 算法运算符 调用静态属性
SpEL 引用其他对象 引用其他对象属性 if-else
3000000?'经理':'白领'}"/>
这里就存在动态赋值,如info属性,我需要根据car.price的具体值决定info的值