使用Expression接口进行表达式求值:
SpEL主要提供如下三个接口:
- ExpressionParser:该接口负责解析一个SpEL表达式,返回一个Expression对象。
- Expression:该接口实例代表一个表达式。
- EvalutionContext:代表计算表达式值得上下文。
Expression实例代表一个表达式,它包含了如下方法用于计算,得到表达式的值:
- Object getValue():计算表达式的值。
- <T> T getValue(Class<T> desireResultType):计算表达式的值,而且尝试将该表达式的值当成desireResultType类型来处理。
- Object getValue(EvaluationContext context):使用指定的EvaluationContext来计算表达式的值。
- <T> T getValue(EvaluationContext context,Class<T> desireResultType):计算表达式的值,而且尝试将该表达式的值当成desireResultType类型来处理。
- Object getValue(Object rootObject):以rootObject作为表达式的root对象来计算表达式的值。
- <T> T getValue(Object rootObject,Class<T> desireResultType):以rootObject作为表达式的root对象来计算表达式的值。而且尝试将该表达式的值当成desireResultType类型来处理。
Bean定义中的表达式语言支持:
Author.java
public class Author implements Persion
{
private Integer id;
private String name;
private List<String> books;
.......省略所有的setter和getter方法.......
public void useAxe(){
System.out.println(axe.chop());
}
}
beans.xml
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd" >
<!--
配置setName()的参数时,在表达式中调用方法
配置setAxe()的参数时 ,在表达式中创建对象
配置调用setBooks()的参数,在表达式中访问其他的Bean属性
-->
<bean id="author" class="entity.Author" p:name="#{T(java.lang.Math).random()}"
p:axe="#{new entity.SteelAxe()"}
p:books="#{{confTest.a,confTest.b}}"/>
</beans>