我们为Bean的属性和构造器参数装配的所有东西都是在Spring的XML配置文件中静态定义的。同样我们装配其他Bean的引用也都是在配置Spring配置文件时就已经确定了。但是,我们为属性装配的值在运行期才能知道,那又如何实现呢?
Spring3引入了Spring表达式语言,SpEL。SpEL是一种强大、简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中,使用SpEL,可以实现超乎想象的装配效果,这是使用传统的Spring装配方式难以做到的。
SpEL拥有许多特性,包括:使用Bean的ID来引用Bean;调用方法和访问对象的属性;对值进行算术、关系和逻辑运算;正则表达式匹配;集合操作。
1、引用Bean、Properties和方法
引用其他Bean
<property name="instrument" value="#{saxophone}"/>
引用其他Bean的属性
<bean id="carl" class="com.spring.InstrumentList">
<property name="song" value="#{kenny.song}"/>
</bean>
引用其他Bean的方法
<property name="song" value="#{songSelector.selectSong()}"/>
调用UpperCase方法
<property name="song" value="#{songSelector.selectSong().toUpperCase()}"/>
?.跟上面的区别是当selectSong方法返回null将不执行toUpperCase
<property name="song" value="#{songSelector.selectSong()?.toUpperCase()}"/>
2、操作类
<property name="area" value="#{T(java.lang.Math).PI*circle.radius^2}"/>