使用SpEl进行表达式操作,基本操作如下:
<!--第一步,构建解析 -->
ExpressionParser parser = new SpelExpressionParser(); <!--第二步,使用表达式进行解析-->
Expression exp = parser.parseExpression( "('hello').concat(#end)"); <!--第三步,使用上下文设值(可省)-->
StandardEvaluationContext sec = new StandardEvaluationContext();
sec.setVariable("end", "!"); <!--第四步,获取结果-->
<!--没有第三步时-->
exp.getValue();
<!--有第三步时-->
exp.getValue(sec);
▲基础特性
——SpEL使用#{…}作为定界符,所有在大框号中的字符都将被认为是SpEL.
——1、 字面量的表示
<property name="count" value="#{5}"/>
<property name="frequency" value="#{89.7}"/>
<property name="capacity" value="#{1e4}"/>
<property name="name" value="#{'Chuck'}"/>
<property name='name' value='#{"Chuck"}'/>
<property name="enabled" value="#{false}"/>
——2、 引用Bean,属性和方法
1>引用其他对象
<bean id=”saxophone” value=”com.xxx.xxx.Xxx”/>
<bean ..>
.
<property name="instrument" value="#{saxophone}"/>
.
<bean/>
通过id:“saxophone”将对象注入到instrument属性中,这与下面的配置是一样的:
<property name="instrument" ref="saxophone"/>
2> 引用其他对象的属性
<bean id="carl"
class="com.springinaction.springidol.Instrumentalist">
<property name="song" value="#{kenny.song}" />
</bean>
▲SpEL对集合的支持
<util:list id="cities">
<bean class="com.habuma.spel.cities.City"
p:name="Chicago" p:state="IL" p:population="2853114"/>
<bean class="com.habuma.spel.cities.City"
p:name="Atlanta" p:state="GA" p:population="537958"/>
<bean class="com.habuma.spel.cities.City"
p:name="Dallas" p:state="TX" p:population="1279910"/>
<bean class="com.habuma.spel.cities.City"
p:name="Houston" p:state="TX" p:population="2242193"/>
<bean class="com.habuma.spel.cities.City"
p:name="Odessa" p:state="TX" p:population="90943"/>
<bean class="com.habuma.spel.cities.City"
p:name="El Paso" p:state="TX" p:population="613190"/>
<bean class="com.habuma.spel.cities.City"
p:name="Jal" p:state="NM" p:population="1996"/>
<bean class="com.habuma.spel.cities.City"
p:name="Las Cruces" p:state="NM" p:population="91865"/>
</util:list>
——1、 获取Collection中的某个对象
〇通过下标访问,如下:
<property name="chosenCity" value="#{cities[2]}"/>
——2、获取Collection中的子集-通过条件筛选(注意新对象是一个新的Collection)
<!--筛选子集(.?[])-->
<property name="bigCities" value="#{cities.?[population gt 100000]}"/> <!--获取第一个(.^[])-->
<property name="aBigCity" value="#{cities.^[population gt 100000]}"/> <--获取最后一个(.$[])-->
<property name="aBigCity" value="#{cities.$[population gt 100000]}"/>
——3、集合的投影(.![])
<!-- 如果想获得所有城市的名称组成的列表,可用如下操作,将返回"Chicago", "Atlanta", "Dallas" -->
<property name="cityNames" value="#{cities.![name]}"/> <!-- 将返回"Chicago, IL", "Atlanta, GA", and "Dallas, TX".-->
<property name="cityNames" value="#{cities.![name + ', ' + state]}"/>