温馨提示×

温馨提示×

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

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

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

发布时间:2021-03-22 17:44:38 来源:亿速云 阅读:207 作者: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