续上篇。
SpEL操作集合的能力是很让人着迷的。
为了刚好的展示,我们定义一个Person类。
package org.chen; public class Person{ private int age; private String name; private double salary; // omit the getter and setter }
<util:list id="persons"> <bean class="org.chen.Person" p:name="CZP" p:age="21" p:salary="20000.0" /> <bean class="org.chen.Person" p:name="JACK" p:age="18" p:salary="15000.0" /> </util:list>
使用[]访问:
<property name="chosenPerson" value="#{persons[1]}" />对获取Map对象也类似。
它还可以访问<util:properties>所声明的属性。Spring 还为SpEL创造了两种特殊的选择属性的方式,一种是systemEnvironment,另一种是systemProperties.
前者是机器的环境变量。后者是Java 程序的所有设置属性,一般是-D参数。
<property name="homepath" value="#{systemEnvironment['HOME']}" />
<util:property id=”setting" location="classpath:setting.properties" />
比如,我们查询工资(salary)高于16000的人。在SpEL只要一个查询运算符(.?[])就可以了.
<property name="highs" value="#{persons.?[salary gt 16000]}“ />
它还提供了返回查询满足条件的第一个或最后一个的运算符。.^[] , .$[] 这里不再举例。
可能你觉得它和SQL语句的功能有点类似,确实是。它还提供了投影功能(project)。
投影集合运算符 .![]
如返回所有人名字的集合,
<property name="names" values="#{persons.![name]}" />
<property name="names" values="#{persons.![name + ‘,’+ age]}" />
你可能已经想到,我们可以把查询和投影可以一起使用。
<property name="names" values="#{persons.?[salary gt 16000].![name]}" />
正如上面介绍的,SpEL功能可以很强大,但我们一般不建议过度使用它。因为它毕竟是个字符串,难以在IDE下调式。
原文地址:http://blog.csdn.net/chenloveit/article/details/38824617