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

更多关于java相关内容感兴趣的读者可查看本站专题:《Spring框架入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

你可能感兴趣的:(Spring实战之使用Expression接口进行表达式求值操作示例)