温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在Spring中使用Expression接口对表达式进行求值

发布时间:2021-03-22 17:44:38 来源:亿速云 阅读:240 作者:Leah 栏目:编程语言

怎么在Spring中使用Expression接口对表达式进行求值?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一 Bean

package org.crazyit.app.domain; import java.util.Date; public class Person {    private Integer id;    private String name;    private Date birth;    // 无参数的构造器    public Person()    {    }    // 初始化全部成员变量的构造器    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)   {     // 创建一个ExpressionParser对象,用于解析表达式     ExpressionParser parser = new SpelExpressionParser();     // 最简单的字符串表达式     Expression exp = 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("new String('helloworld')"       + ".toUpperCase()");     System.out.println("new String('helloworld')"       + ".toUpperCase()的结果是: "       + exp.getValue(String.class));     Person person = new Person(1 , "孙悟空", new Date());     exp = parser.parseExpression("name");     // 以指定对象作为root来计算表达式的值     // 相当于调用person.name表达式的值     System.out.println("以persn为root,name表达式的值是: "       + exp.getValue(person , String.class));     exp = parser.parseExpression("name=='孙悟空'");     StandardEvaluationContext ctx = new StandardEvaluationContext();     // 将person设为Context的root对象     ctx.setRootObject(person);     // 以指定Context来计算表达式的值     System.out.println(exp.getValue(ctx , Boolean.class));     List<Boolean> list = new ArrayList<Boolean>();     list.add(true);     EvaluationContext ctx2 = new StandardEvaluationContext();     // 将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
new String('helloworld').toUpperCase()的结果是: HELLOWORLD
以persn为root,name表达式的值是: 孙悟空
true
list集合的第一个元素为:false

看完上述内容,你们掌握怎么在Spring中使用Expression接口对表达式进行求值的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI