Spring实战之使用Expression接口进行表达式求值操作示例
本文实例讲述了Spring使用Expression接口进行表达式求值操作。分享给大家供大家参考,具体如下:
一Bean
packageorg.crazyit.app.domain;
importjava.util.Date;
publicclassPerson
{
privateIntegerid;
privateStringname;
privateDatebirth;
//无参数的构造器
publicPerson()
{
}
//初始化全部成员变量的构造器
publicPerson(Integerid,Stringname,Datebirth)
{
this.id=id;
this.name=name;
this.birth=birth;
}
//id的setter和getter方法
publicvoidsetId(Integerid)
{
this.id=id;
}
publicIntegergetId()
{
returnthis.id;
}
//name的setter和getter方法
publicvoidsetName(Stringname)
{
this.name=name;
}
publicStringgetName()
{
returnthis.name;
}
//birth的setter和getter方法
publicvoidsetBirth(Datebirth)
{
this.birth=birth;
}
publicDategetBirth()
{
returnthis.birth;
}
}
二测试类
packagelee;
importorg.springframework.expression.*;
importorg.springframework.expression.spel.standard.*;
importorg.springframework.expression.spel.support.*;
importjava.util.*;
importorg.crazyit.app.domain.*;
publicclassSpELTest
{
publicstaticvoidmain(String[]args)
{
//创建一个ExpressionParser对象,用于解析表达式
ExpressionParserparser=newSpelExpressionParser();
//最简单的字符串表达式
Expressionexp=parser.parseExpression("'HelloWorld'");
System.out.println("'HelloWorld'的结果:"+exp.getValue());
//调用方法的表达式
exp=parser.parseExpression("'HelloWorld'.concat('!')");
System.out.println("'HelloWorld'.concat('!')的结果:"
+exp.getValue());
//调用对象的getter方法
exp=parser.parseExpression("'HelloWorld'.bytes");
System.out.println("'HelloWorld'.bytes的结果:"
+exp.getValue());
//访问对象的属性(d相当于HelloWorld.getBytes().length)
exp=parser.parseExpression("'HelloWorld'.bytes.length");
System.out.println("'HelloWorld'.bytes.length的结果:"
+exp.getValue());
//使用构造器来创建对象
exp=parser.parseExpression("newString('helloworld')"
+".toUpperCase()");
System.out.println("newString('helloworld')"
+".toUpperCase()的结果是:"
+exp.getValue(String.class));
Personperson=newPerson(1,"孙悟空",newDate());
exp=parser.parseExpression("name");
//以指定对象作为root来计算表达式的值
//相当于调用person.name表达式的值
System.out.println("以persn为root,name表达式的值是:"
+exp.getValue(person,String.class));
exp=parser.parseExpression("name=='孙悟空'");
StandardEvaluationContextctx=newStandardEvaluationContext();
//将person设为Context的root对象
ctx.setRootObject(person);
//以指定Context来计算表达式的值
System.out.println(exp.getValue(ctx,Boolean.class));
Listlist=newArrayList();
list.add(true);
EvaluationContextctx2=newStandardEvaluationContext();
//将list设置成EvaluationContext的一个变量
ctx2.setVariable("list",list);
//修改list变量的第一个元素的值
parser.parseExpression("#list[0]").setValue(ctx2,"false");
//list集合的第一个元素被改变
System.out.println("list集合的第一个元素为:"
+parser.parseExpression("#list[0]").getValue(ctx2));
}
}
三测试结果
'HelloWorld'的结果:HelloWorld
'HelloWorld'.concat('!')的结果:HelloWorld!
'HelloWorld'.bytes的结果:[B@14899482
'HelloWorld'.bytes.length的结果:10
newString('helloworld').toUpperCase()的结果是:HELLOWORLD
以persn为root,name表达式的值是:孙悟空
true
list集合的第一个元素为:false
更多关于java相关内容感兴趣的读者可查看本站专题:《Spring框架入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。