Spring實戰(zhàn)之使用Expression接口進(jìn)行表達(dá)式求值操作示例
本文實例講述了Spring使用Expression接口進(jìn)行表達(dá)式求值操作。分享給大家供大家參考,具體如下:
一 Bean
package org.crazyit.app.domain;
import java.util.Date;
public class Person
{
private Integer id;
private String name;
private Date birth;
// 無參數(shù)的構(gòu)造器
public Person()
{
}
// 初始化全部成員變量的構(gòu)造器
public Person(Integer id , String name , Date birth)
{
this.id = id;
this.name = name;
this.birth = birth;
}
// id的setter和getter方法
public void setId(Integer id)
{
this.id = id;
}
public Integer getId()
{
return this.id;
}
// name的setter和getter方法
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
// birth的setter和getter方法
public void setBirth(Date birth)
{
this.birth = birth;
}
public Date getBirth()
{
return this.birth;
}
}
二 測試類
package lee;
import org.springframework.expression.*;
import org.springframework.expression.spel.standard.*;
import org.springframework.expression.spel.support.*;
import java.util.*;
import org.crazyit.app.domain.*;
public class SpELTest
{
public static void main(String[] args)
{
// 創(chuàng)建一個ExpressionParser對象,用于解析表達(dá)式
ExpressionParser parser = new SpelExpressionParser();
// 最簡單的字符串表達(dá)式
Expression exp = parser.parseExpression("'HelloWorld'");
System.out.println("'HelloWorld'的結(jié)果: " + exp.getValue());
// 調(diào)用方法的表達(dá)式
exp = parser.parseExpression("'HelloWorld'.concat('!')");
System.out.println("'HelloWorld'.concat('!')的結(jié)果: "
+ exp.getValue());
// 調(diào)用對象的getter方法
exp = parser.parseExpression("'HelloWorld'.bytes");
System.out.println("'HelloWorld'.bytes的結(jié)果: "
+ exp.getValue());
// 訪問對象的屬性(d相當(dāng)于HelloWorld.getBytes().length)
exp = parser.parseExpression("'HelloWorld'.bytes.length");
System.out.println("'HelloWorld'.bytes.length的結(jié)果:"
+ exp.getValue());
// 使用構(gòu)造器來創(chuàng)建對象
exp = parser.parseExpression("new String('helloworld')"
+ ".toUpperCase()");
System.out.println("new String('helloworld')"
+ ".toUpperCase()的結(jié)果是: "
+ exp.getValue(String.class));
Person person = new Person(1 , "孫悟空", new Date());
exp = parser.parseExpression("name");
// 以指定對象作為root來計算表達(dá)式的值
// 相當(dāng)于調(diào)用person.name表達(dá)式的值
System.out.println("以persn為root,name表達(dá)式的值是: "
+ exp.getValue(person , String.class));
exp = parser.parseExpression("name=='孫悟空'");
StandardEvaluationContext ctx = new StandardEvaluationContext();
// 將person設(shè)為Context的root對象
ctx.setRootObject(person);
// 以指定Context來計算表達(dá)式的值
System.out.println(exp.getValue(ctx , Boolean.class));
List<Boolean> list = new ArrayList<Boolean>();
list.add(true);
EvaluationContext ctx2 = new StandardEvaluationContext();
// 將list設(shè)置成EvaluationContext的一個變量
ctx2.setVariable("list" , list);
// 修改list變量的第一個元素的值
parser.parseExpression("#list[0]").setValue(ctx2 , "false");
// list集合的第一個元素被改變
System.out.println("list集合的第一個元素為:"
+ parser.parseExpression("#list[0]").getValue(ctx2));
}
}
三 測試結(jié)果
'HelloWorld'的結(jié)果: HelloWorld
'HelloWorld'.concat('!')的結(jié)果: HelloWorld!
'HelloWorld'.bytes的結(jié)果: [B@14899482
'HelloWorld'.bytes.length的結(jié)果:10
new String('helloworld').toUpperCase()的結(jié)果是: HELLOWORLD
以persn為root,name表達(dá)式的值是: 孫悟空
true
list集合的第一個元素為:false
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Spring框架入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。

