首页 > 代码库 > Spring 表达式语言 (二)

Spring 表达式语言 (二)

续上篇。

SpEL操作集合的能力是很让人着迷的。

为了刚好的展示,我们定义一个Person类。

package org.chen;
public class Person{

	private int age;
	private String name;
	private double salary;

	// omit the getter and setter
}

我们再配置一个包含Person对象的List集合。

<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>

下面看看SpEL操作集合:

使用[]访问:

<property name="chosenPerson" value=http://www.mamicode.com/"#{persons[1]}" />
对获取Map对象也类似。


它还可以访问<util:properties>所声明的属性。Spring 还为SpEL创造了两种特殊的选择属性的方式,一种是systemEnvironment,另一种是systemProperties.

前者是机器的环境变量。后者是Java 程序的所有设置属性,一般是-D参数。

<property name="homepath" value=http://www.mamicode.com/"#{systemEnvironment['HOME']}" />

对于自定义的properties文件,先通过<util:properties>加载。

<util:property id=”setting" location="classpath:setting.properties" />

上面展示的选择集合成员,下面是带查询条件的选择。

比如,我们查询工资(salary)高于16000的人。在SpEL只要一个查询运算符(.?[])就可以了.

<property name="highs" value=http://www.mamicode.com/"#{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下调式。

Spring 表达式语言 (二)