Spring实战-使用表达式装配(三)

到目前为止我们为Bean的属性和构造器参数装配的所有东西都是在Sping的xml文件中静态定义的。但是如果我们为属性装配的值只又在运行的时期才能知道,如何实现?

Spring3中引入了Spring表达式语言:SpEL装配Bean方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中。

一.SpEL的基本原理

SqEL表达式的首要目标是通过计算获取某个值。最简单的SqEL求值或许是对字面值,Bean的属性或者某个类的常量进行求值。

(1)字面值

#{}会提示Spring这个标记里面的内容是SpEL表达式,同时它们还可以与非SqEL表达式的值混用:


String类型的字面值可以使用单引号或者双引号作为字符串的定界符。


(2)引用Bean,Properties和方法

SqEL表达式能做的另一个基本事情是通过ID引用其他Bean。例如:我们需要在SqEL表达式中通过使用BeanID将一个Bean装配到另一个Bean属性中:

 

这里我们使用SqEL将一个ID为piano的Bean装配到了instrument属性中,当然我们可以不用SqEL而使用ref属性。

但是我们可以使用SqEl做更有趣的事情,我们可以调用piano的方法以及属性:

同样我们也可以调用piano的属性:例如我们返回英文歌曲名字,这里我们返回的
	
使用?.运算符是因为可以确保左边项不会为Null,如果song属性的值为null,SqEl将不会在调用该属性。

(3)操作类

在SqEL中使用T()运算符会调用类作用域的方法和常量例如:

 

二.在SqEL值上执行操作

SqEL提供了多种运算符,可以进行表达式求值:

Spring EL 支持大多数的数学操作符、逻辑操作符、关系操作符。

  1.关系操作符

  包括:等于 (==, eq),不等于 (!=, ne),小于 (<, lt),,小于等于(<= , le),大于(>, gt),大于等于 (>=, ge)

  2.逻辑操作符

  包括:and,or,and not(!)

  3.数学操作符

  包括:加 (+),减 (-),乘 (*),除 (/),取模 (%),幂指数 (^)。


(1)使用SqEL进行数值运算:

 

(2)使用SqEL进行比较值:

(3)使用SqEL进行逻辑表达式:
(4)条件表达式:

 
三.在SqEL中筛选集合


SqEL同样具有基于属性值来过滤集合成员的能力,SqEL还可以充集合的成员中提取某些属性放到一个新的集合中。

这里我们定义了一个City类:

package com.entity;


public class City {
	private String name;
	private String state;
	private int popluation;
	private City choseCity;
	public City getChoseCity() {
		return choseCity;
	}
	public void setChoseCity(City choseCity) {
		this.choseCity = choseCity;
		name = choseCity.getName();
		state=choseCity.getState();
		popluation=choseCity.getPopluation();
	}
	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 getPopluation() {
		return popluation;
	}
	public void setPopluation(int popluation) {
		this.popluation = popluation;
	}
	
	public void write(){
		System.out.println("name="+name+",state="+state+",popluation="+popluation);
	}

}
我们使用元素在Spring中配置了一个包含City对象的List集合:


	
		
		
	
(1)访问集合成员:

 
		 	
		 

这里的测试类:

package com;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.entity.City;
import com.entity.sqEl;

public class springTest {
	public static void main(String[] args) {
		ApplicationContext cxt=new ClassPathXmlApplicationContext(
				 "classpath:/spring/spring.xml");
		City city=(City) cxt.getBean("cityTest");
		city.write();
	}

}





你可能感兴趣的:(Spring,学习)