- Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。
- 语法类似于EL:SpEL使用#{...}作为定界符,所有在大框号中的字符都将被认为是SpEL。
- SpEL为Bean的属性进行动态赋值提供了便利。
- 通过SpEL可以实现:
通过bean的id对bean进行引用
调用方法以及引用对象中的属性
计算表达式的值
正则表达式的匹配
字面量
字面量的表示:
整数:<property name="count" value="#{5}"/>
小数:<property name="frequency" value="#{89.5}"/>
科学计数法:<property name="capacity" value="#{1e4}"/>
String可以使用单引号或者双引号作为字符串的定界符号:
<property name="name" value="#{'Chuck'}"/>或<property name='name' value='#{"Chuck"}'/>
Boolean:<property name="enabled" value="#{false}"/>
引用Bean、属性和方法(1)
引用其他对象:
<!-- 通过value属性和SpEL配置Bean之间的应用关系 -->
<property name="prefix" value="#{prefixGenerator}"></property>
引用其他对象的属性
<!-- 通过value属性和SpEL配置suffix属性值为另一个Bean的suffix属性值 -->
<property name="prefix" value="#{sequenceGenerator.suffix}"></property>
调用其他方法,还可以链式操作
<!-- 通过value属性和SpEL配置suffix属性值为另一个Bean的方法的返回值-->
<property name="prefix" value="#{sequenceGenerator.toString()}"></property>
<!--方法的联机-->
<property name="prefix" value="#{sequenceGenerator.toString().toUpperCase()}"></property>
算数运算符:+,-,*,、,%,^
<constructor-arg value="#{performer.firstName+' '+performer.lastName"/>
加号还可以作为字符串连接:
<constructor-arg value="#{performer.firstName+' '+performer.lastName"/>
比较运算符:<,>,==,<=,>=,lt,gt,eg,le,ge
运算符号(2)
逻辑运算符号:and,or,not,|
if-else运算符:?:(temary),?:(Elvis)
<property name="area" value="#{songSelector.selectSong()=='Jingle Bells'?piano:'Jingle Bells'}"/>
if-else的变体
<property name="area" value="#{kenny.song ?: "Greensleeves'}"/>
正则表达式:matches
<property name="area" value="#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}'}"/>
<bean id="address" class="com.wq.spring.beans.spel.Address">
<property name="city" value="#{'BeiJing'}"></property>
<property name="street" value="WuDaoKou"></property>
</bean>
<bean id="car" class="com.wq.spring.beans.spel.Car">
<property name="brand" value="Audi"></property>
<property name="price" value="900000"></property>
<property name="tyrePerimeter" value="#{T(java.lang.Math).PI*80"></property>
</bean>