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

怎么在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 list = new ArrayList();
    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接口对表达式进行求值的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


本文标题:怎么在Spring中使用Expression接口对表达式进行求值
转载来源:http://ybzwz.com/article/psdpph.html