Spring实战之SpEl语法实例详解
本文实例讲述了Spring实战之SpEl语法。分享给大家供大家参考,具体如下:
一Bean
packageorg.crazyit.app.domain;
importjava.util.Date;
publicclassPerson
{
privateIntegerid;
privateStringname;
privateintheight;
publicPerson()
{
}
//初始化全部成员变量的构造器
publicPerson(Integerid,Stringname,intheight)
{
this.id=id;
this.name=name;
this.height=height;
}
//id的setter和getter方法
publicvoidsetId(Integerid)
{
this.id=id;
}
publicIntegergetId()
{
returnthis.id;
}
//name的setter和getter方法
publicvoidsetName(Stringname)
{
this.name=name;
}
publicStringgetName()
{
returnthis.name;
}
//height的setter和getter方法
publicvoidsetHeight(intheight)
{
this.height=height;
}
publicintgetHeight()
{
returnthis.height;
}
}
二测试类
packagelee;
importorg.springframework.expression.*;
importorg.springframework.expression.spel.standard.*;
importorg.springframework.expression.spel.support.*;
importorg.springframework.expression.common.TemplateParserContext;
importjava.util.*;
importorg.crazyit.app.domain.*;
publicclassSpELTest
{
publicstaticvoidmain(String[]args)
{
//创建一个ExpressionParser对象,用于解析表达式
ExpressionParserparser=newSpelExpressionParser();
//使用直接量表达式
Expressionexp=parser.parseExpression("'HelloWorld'");
System.out.println(exp.getValue(String.class));
exp=parser.parseExpression("0.23");
System.out.println(exp.getValue(Double.class));
System.out.println("---------------------------------------------");
//------------使用SpEL创建数组-----------
//创建一个数组
exp=parser.parseExpression(
"newString[]{'java','Struts','Spring'}");
System.out.println(exp.getValue());
//创建二维数组
exp=parser.parseExpression(
"newint[2][4]");
System.out.println(exp.getValue());
System.out.println("---------------------------------------------");
//------------使用SpEL创建List集合-----------
exp=parser.parseExpression(
"{'java','Struts','Spring'}");
System.out.println(exp.getValue());
//创建“二维”List集合
exp=parser.parseExpression(
"{{'疯狂Java讲义','疯狂Android讲义'},{'左传','战国策'}}");
System.out.println(exp.getValue());
System.out.println("---------------------------------------------");
//------------使用SpEL访问List集合、Map集合的元素-----------
Listlist=newArrayList();
list.add("Java");
list.add("Spring");
Mapmap=
newHashMap();
map.put("Java",80.0);
map.put("Spring",89.0);
//创建一个EvaluationContext对象,作为SpEL解析变量的上下文
EvaluationContextctx=newStandardEvaluationContext();
//设置两个变量
ctx.setVariable("mylist",list);
ctx.setVariable("mymap",map);
//访问List集合的第二个元素
System.out.println(parser
.parseExpression("#mylist[1]").getValue(ctx));
//访问Map集合的指定元素
System.out.println(parser
.parseExpression("#mymap['Java']").getValue(ctx));
System.out.println("---------------------------------------------");
//------------使用SpEL调用方法-----------
//调用String对象的substring()方法
System.out.println(parser
.parseExpression("'HelloWorld'.substring(2,5)")
.getValue());
list=newArrayList();
list.add("java");
list.add("struts");
list.add("spring");
list.add("hibernate");
//创建一个EvaluationContext对象,作为SpEL解析变量的上下文
ctx=newStandardEvaluationContext();
//设置一个变量
ctx.setVariable("mylist",list);
//调用指定变量所代表的对象的subList()方法
System.out.println(parser
.parseExpression("#mylist.subList(1,3)").getValue(ctx));
System.out.println("---------------------------------------------");
//------------在SpEL中使用运算符-----------
list=newArrayList();
list.add("java");
list.add("struts");
list.add("spring");
list.add("hibernate");
//创建一个EvaluationContext对象,作为SpEL解析变量的上下文
ctx=newStandardEvaluationContext();
//设置一个变量
ctx.setVariable("mylist",list);
//对集合的第一个元素进行赋值
parser.parseExpression("#mylist[0]='疯狂Java讲义'")
.getValue(ctx);
//下面将输出疯狂Java讲义
System.out.println(list.get(0));
//使用三目运算符
System.out.println(parser.parseExpression("#mylist.size()>3?"
+"'myList长度大于3':'myList长度不大于3'")
.getValue(ctx));
System.out.println("---------------------------------------------");
//------------在SpEL中使用类型运算符-----------
//调用Math的静态方法
System.out.println(parser.parseExpression(
"T(java.lang.Math).random()").getValue());
//调用Math的静态方法
System.out.println(parser.parseExpression(
"T(System).getProperty('os.name')").getValue());
System.out.println("---------------------------------------------");
//------------在SpEL中调用构造器-----------
//创建对象
System.out.println(parser.parseExpression(
"newString('HelloWorld').substring(2,4)")
.getValue());
//创建对象
System.out.println(parser.parseExpression(
"newjavax.swing.JFrame('测试')"
+".setVisible('true')").getValue());
System.out.println("---------------------------------------------");
//------------在SpEL中使用安全导航操作-----------
//使用安全操作,将输出null
System.out.println("----"+parser.parseExpression(
"#foo?.bar").getValue());
//不使用安全操作,将引发NullPointerException
//System.out.println(parser.parseExpression(
//"#foo.bar").getValue());
System.out.println("---------------------------------------------");
//------------在SpEL中对集合进行选择-----------
list=newArrayList();
list.add("疯狂Java讲义");
list.add("疯狂Ajax讲义");
list.add("疯狂iOS讲义");
list.add("经典JavaEE企业应用实战");
//创建一个EvaluationContext对象,作为SpEL解析变量的上下文
ctx=newStandardEvaluationContext();
ctx.setVariable("mylist",list);
//判断集合元素length()方法的长度大于7,“疯狂iOS讲义”被剔除
Expressionexpr=parser.parseExpression
("#mylist.?[length()>7]");
System.out.println(expr.getValue(ctx));
map=newHashMap();
map.put("Java",89.0);
map.put("Spring",82.0);
map.put("英语",75.0);
ctx.setVariable("mymap",map);
//判断Map集合的value值大于80,只保留前面2个Entry
expr=parser.parseExpression
("#mymap.?[value>80]");
System.out.println(expr.getValue(ctx));
System.out.println("---------------------------------------------");
//------------在SpEL中对集合进行投影-----------
list=newArrayList();
list.add("疯狂Java讲义");
list.add("疯狂Ajax讲义");
list.add("疯狂iOS讲义");
list.add("经典JavaEE企业应用实战");
//创建一个EvaluationContext对象,作为SpEL解析变量的上下文
ctx=newStandardEvaluationContext();
ctx.setVariable("mylist",list);
//得到的新集合的元素是原集合的每个元素length()方法返回值
expr=parser.parseExpression
("#mylist.![length()]");
System.out.println(expr.getValue(ctx));
Listlist2=newArrayList();
list2.add(newPerson(1,"孙悟空",162));
list2.add(newPerson(2,"猪八戒",182));
list2.add(newPerson(3,"牛魔王",195));
ctx.setVariable("mylist2",list2);
//得到的新集合的元素是原集合的每个元素name属性值
expr=parser.parseExpression
("#mylist2.![name]");
System.out.println(expr.getValue(ctx));
System.out.println("---------------------------------------------");
//------------在SpEL中使用表达式模板-----------
Personp1=newPerson(1,"孙悟空",162);
Personp2=newPerson(2,"猪八戒",182);
expr=parser.parseExpression(
"我的名字是#{name},身高是#{height}"
,newTemplateParserContext());
//将使用p1对象name、height填充上面表达式模板中的#{}
System.out.println(expr.getValue(p1));
//将使用p2对象name、height填充上面表达式模板中的#{}
System.out.println(expr.getValue(p2));
}
}
三测试结果
HelloWorld
0.23
---------------------------------------------
[Ljava.lang.String;@2c13da15
[[I@77556fd
---------------------------------------------
[java,Struts,Spring]
[[疯狂Java讲义,疯狂Android讲义],[左传,战国策]]
---------------------------------------------
Spring
80.0
---------------------------------------------
llo
[struts,spring]
---------------------------------------------
疯狂Java讲义
myList长度大于3
---------------------------------------------
0.5577767377702313
Windows10
---------------------------------------------
ll
null
---------------------------------------------
----null
---------------------------------------------
[疯狂Java讲义,疯狂Ajax讲义,经典JavaEE企业应用实战]
{Java=89.0,Spring=82.0}
---------------------------------------------
[8,8,7,15]
[孙悟空,猪八戒,牛魔王]
---------------------------------------------
我的名字是孙悟空,身高是162
我的名字是猪八戒,身高是182
更多关于java相关内容感兴趣的读者可查看本站专题:《Spring框架入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。