要用到Spring的util(包括util:list等),xml文件中的beans中需要添加一些有关util的信息:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- bean definitions here --> </beans>

首先定义一个City类。

package com.moonlit.myspring;

public class City {
private String name;
private String state;
private int population;
@Override
public String toString() {
return String.format("[%s,%s,%d]", name, state, population);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public int getPopulation() {
return population;
}
public void setPopulation(int population) {
this.population = population;
}
}

使用<util:list>元素在Spring里配置一个包含City对象的List集合。

  <util:list id="cities">
<bean class="com.moonlit.myspring.City"
p:name="Beijing" p:state="BJ" p:population="215213241" />
<bean class="com.moonlit.myspring.City"
p:name="Shanghai" p:state="SH" p:population="242612378" />
<bean class="com.moonlit.myspring.City"
p:name="Guangzhou" p:state="GD" p:population="12700812" />
<bean class="com.moonlit.myspring.City"
p:name="Hangzhou" p:state="HZ" p:population="8700420" />
<bean class="com.moonlit.myspring.City"
p:name="Baoding" p:state="BD" p:population="11194443" />
<bean class="com.moonlit.myspring.City"
p:name="Harbin" p:state="HRB" p:population="10636003" />
<bean class="com.moonlit.myspring.City"
p:name="Shuzhou" p:state="SZ" p:population="10466092" />
<bean class="com.moonlit.myspring.City"
p:name="Xian" p:state="XA" p:population="8467821" />
</util:list>

<util:list>元素是由Spring的util命名空间所定义的。它创建了一个java.util.List类型的Bean,这个集合里包含了所有以上配置的Bean。
<util:list>对象也是一个Bean,我们可以通过以下方式获得cities:

List<City> cities = (List<City>) context.getBean("cities");

可以通过如下方式访问集合成员:

    <property name="chosenCity" value="#{cities[2]}" />
<property name="randomChosenCity" value="#{cities[T(java.lang.Math).random() * cities.size()]}" />

中括号([])运算符会始终通过索引访问集合中的成员。
[]运算符同样可以用来获取java.util.Map集合中的成员。例如,假设City对象以其名字作为键放入Map集合中。在这种场景下,我们可以像下面展示的那样获取键为Dallas的entry:

<property name="choseCity" value="#{cities['Dallas']}" />

[]运算符还可以从java.util.Properties集合中获取值。例如,假设我们需要通过<util:properties>元素在Spring中加载一个properties配置文件:

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

这里定义的settings Bean是一个java.util.Propertes类,夹在了一个名为名为settings.properties的文件。我们可以使用SpEL获得settings Bean中名为twitter.accessTokend的对象:

<properties name="accessToken" value="#{settings['twitter.accessToken']}" />

除了访问<util:properties>所生命的集合中的属性,Spring还为SpEL选择了两种特殊的选择属性的方式:systemEnvironment和systemProperties。
systemEnvironment包含了应用程序所在机器上的所有环境变量。

<property name="homePath" value="${systemEnvironment['HOME']}" />

systemPropreties包含了Java应用程序启动时所设置的所有属性(通常通过-D参数)。例如,如果使用-Dapplication.home=/etc/myapp,来启动JVM,那么你就可以通过以下SpEL表达式将该值注入homePath属性中:

<property name="homePath" value="#{systemProperties['application.home']}" />

[]运算符同样可以通过索引来得到字符串的某个字符。例如,下面的表达式返回“s”:

'This is a test'[3]

查询集合成员 —— 查询运算符(.?[])

<property name="bigCities" value="#{cities.?[population gt 2e7]}" />

查询运算符会创建一个新的集合,新的集合中只存放符合中括号内的表达式的成员。这里,bigCIties属性被注入了人口多于20000000的城市集合。
SpEL还提供了两种其他查询运算符:
“.^[]”:从集合中查询第一个匹配项。
“.$[]”:从集合中查询最后一个匹配项。
例如:

<property name="aBigCity" value="#{cities.^[population gt 2e7]}" />
<property name="aBigCity" value="#{cities.$[population gt 2e7]}" />

投影集合 —— 投影运算符(.![])
集合投影是从集合的每一个元素中选择特定的属性放入一个新的集合中。
例如,从cities中获得所有的name:

<property name="cityNames" value="#{cities.![name]}" />

查询运算符.?[]和投影运算符.![]可以混合使用。

<property name="sityNames" value="#{cities.?[population gt 2e7].![name + ',' + state]}" />

演示上面部分效果的程序:

package com.moonlit.myspring;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Hero {
private City chosenCity;
private City randomChosenCity;
private String homePath;
private List<City> bigCities;
private List<String> cityNames;
public void perform() {
System.out.println("chosen city = " + chosenCity);
System.out.println("random chosen city = " + randomChosenCity);
System.out.println("home path = " + homePath);
System.out.println("big cities:");
for (City city : bigCities)
System.out.println("\t" + city);
System.out.println("city names :");
for (String cityName : cityNames)
System.out.println("\t" + cityName);
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"spring-util-idol.xml");
// util:list is also a bean
List<City> cities = (List<City>) context.getBean("cities");
for (City city : cities)
System.out.println(city);
Hero hero = (Hero) context.getBean("hero");
hero.perform(); }
public City getChosenCity() {
return chosenCity;
}
public void setChosenCity(City chosenCity) {
this.chosenCity = chosenCity;
}
public City getRandomChosenCity() {
return randomChosenCity;
}
public void setRandomChosenCity(City randomChosenCity) {
this.randomChosenCity = randomChosenCity;
}
public String getHomePath() {
return homePath;
}
public void setHomePath(String homePath) {
this.homePath = homePath;
}
public List<City> getBigCities() {
return bigCities;
}
public void setBigCities(List<City> bigCities) {
this.bigCities = bigCities;
}
public List<String> getCityNames() {
return cityNames;
}
public void setCityNames(List<String> cityNames) {
this.cityNames = cityNames;
} }

Hero.java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- bean definitions here --> <util:list id="cities">
<bean class="com.moonlit.myspring.City"
p:name="Beijing" p:state="BJ" p:population="21521324" />
<bean class="com.moonlit.myspring.City"
p:name="Shanghai" p:state="SH" p:population="24261237" />
<bean class="com.moonlit.myspring.City"
p:name="Guangzhou" p:state="GD" p:population="12700812" />
<bean class="com.moonlit.myspring.City"
p:name="Hangzhou" p:state="HZ" p:population="8700420" />
<bean class="com.moonlit.myspring.City"
p:name="Baoding" p:state="BD" p:population="11194443" />
<bean class="com.moonlit.myspring.City"
p:name="Harbin" p:state="HRB" p:population="10636003" />
<bean class="com.moonlit.myspring.City"
p:name="Shuzhou" p:state="SZ" p:population="10466092" />
<bean class="com.moonlit.myspring.City"
p:name="Xian" p:state="XA" p:population="8467821" />
</util:list> <bean id="hero" class="com.moonlit.myspring.Hero">
<property name="chosenCity" value="#{cities[2]}" />
<property name="randomChosenCity" value="#{cities[T(java.lang.Math).random() * cities.size()]}" />
<property name="homePath" value="#{systemEnvironment['HOME']}" />
<property name="bigCities" value="#{cities.?[population gt 2e7]}" />
<property name="cityNames" value="#{cities.![name]}" />
</bean> </beans>

spring-util-idol.xml

扩展阅读(Spring4.0.x doc里面的xml配置信息和很多例子):http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/xsd-config.html

理解:
<util:list>,<util:map>,<util:properties>可以装配集合,使用前请声明util命名空间。
通过<util:properties id="XX" location="classpath:YY.properties">读取YY.properties文件。
查询运算符:
.?[]:查询所有匹配项
.^[]:查询第一个匹配项
.$[]:查询最后一个匹配项
投影运算符:
.![]

Spring学习笔记--在SpEL中筛选集合的更多相关文章

  1. Spring实战学习笔记之SpEL表达式

            在Spring XML配置文件中装配Bean的属性和构造参数都是静态的,而在运行期才知道装配的值,就可以使用SpEL实现         SpEL表达式的首要目标是通过计算获得某个值. ...

  2. Spring学习笔记(一)

    Spring学习笔记(一) 这是一个沉淀的过程,大概第一次接触Spring是在去年的这个时候,当初在实训,初次接触Java web,直接学习SSM框架(当是Servlet都没有学),于是,养成了一个很 ...

  3. Spring学习笔记2——表单数据验证、文件上传

    在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...

  4. 不错的Spring学习笔记(转)

    Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是s ...

  5. Spring学习笔记之aop动态代理(3)

    Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. Person ...

  6. Spring学习笔记之依赖的注解(2)

    Spring学习笔记之依赖的注解(2) 1.0 注解,不能单独存在,是Java中的一种类型 1.1 写注解 1.2 注解反射 2.0 spring的注解 spring的 @Controller@Com ...

  7. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  8. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  9. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

随机推荐

  1. 一款基于jQuery可放大预览的图片滑块插件

    今天给大家分享一款基于jQuery可放大预览的图片滑块插件.这款jQuery焦点图插件的特点是可以横向左右滑动图片,并且点击图片可以进行放大预览,唯一的缺陷是这款焦点图并不能循环切换,如果你有较好的J ...

  2. jQuery (二)DOM 操作

    一般jquery在web项目的只要作用就是取值和赋值了. 下面了入门下,这些值得获取. <!DOCTYPE html> <html> <head> <meta ...

  3. BusyBox rcS&fstab配置

    rcS为系统初始化脚本,完成最开始的一些配置工作,可开启应用程序. #!/bin/shmount -a      ;mount文件,要mount的文件有fstab指定. . /etc/profile ...

  4. 三、Brackets:一个好用的Web前端开发编辑器

    前言 如果你以前在使用 Dreamweaver 或 Zendstudio 编写HTML,CSS代码,那么你可以尝试使用这个编辑器.他的界面简洁,舒服. 介绍 免费.开源.跨平台的前端开发环境(只是前端 ...

  5. 常见JVM监控工具用法介绍

    VisualVM是一种集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力.所有这些都是免费的!它囊括的命令行工具包括jps,jstat,jmap,jinfo,jstack,JConso ...

  6. 【3C认证】安防产品3C认证

    安防产品3C认证作为3C认证的一部分.安防产品即:防范的手段达到或实现安全的目的的设备或器材. 依据<中华人民共和国产品质量法>.<中华人民共和国标准化法>.<中华人民共 ...

  7. 时间控件 BeatPicker

    项目展示 样式异样,可修改此样式,详见官网:https://github.com/ACT1GMR/BeatPicker --- 开始使用 1.引入js&css文件 <link rel=& ...

  8. SQLSERVER2008中创建数据库发生无法获得数据库'model'上的排他锁

    SQLSERVER2005中创建数据库发生无法获得数据库'model'上的排他锁是怎么回事? 创建数据库失败,提示无法获得数据库‘model’上的排他锁,如下图所示: 解决方法: 在查询分析器中运行如 ...

  9. struts 标签 牛逼之处

    <s:hidden>标签的value属性的类型是String类型,所以把<s:property value="#session.LOGIN_USER"/>当 ...

  10. MFC CreateWindow介绍

    CreateWindow 该函数创建一个重叠式窗口.弹出式窗口或子窗口.它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的).函数也指该窗口的父窗口或所属窗口(如果存在的话),及窗口的 ...