Spring实战之使用Expression接口进行表达式求值操作示例

 更新时间:2019年12月11日 08:36:22   作者:cakincqm  
这篇文章主要介绍了Spring实战之使用Expression接口进行表达式求值操作,结合实例形式分析了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<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

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

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

相关文章

  • java对象数组实现学生信息管理系统

    java对象数组实现学生信息管理系统

    这篇文章主要为大家详细介绍了java对象数组实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Java跨域问题的处理详解

    Java跨域问题的处理详解

    这篇文章主要给大家介绍了关于Java跨域问题处理的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 基于SpringBoot实现上传2种方法工程代码实例

    基于SpringBoot实现上传2种方法工程代码实例

    这篇文章主要介绍了基于SpringBoot实现上传工程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • MyBatisPlus唯一索引批量新增或修改的实现方法

    MyBatisPlus唯一索引批量新增或修改的实现方法

    本文主要介绍了MyBatisPlus唯一索引批量新增或修改的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Spring与Mybatis的整合方法有哪些

    Spring与Mybatis的整合方法有哪些

    本文主要给大家介绍Spring与Mybatis的三种常用整合方法,需要用到的整合框架包mybatis-spring.jar,对spring mybatis整合感兴趣的朋友可以参考下本文
    2015-10-10
  • 解决@RequestBody使用不能class类型匹配的问题

    解决@RequestBody使用不能class类型匹配的问题

    这篇文章主要介绍了解决@RequestBody使用不能class类型匹配的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • IDEA让包分层显示的实现方式

    IDEA让包分层显示的实现方式

    这篇文章主要介绍了IDEA让包分层显示的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 流式图表拒绝增删改查之kafka核心消费逻辑下篇

    流式图表拒绝增删改查之kafka核心消费逻辑下篇

    这篇文章主要为大家介绍了流式图表拒绝增删改查之kafka核心消费逻辑讲解的下篇,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 聊聊Spring循环依赖三级缓存是否可以减少为二级缓存的情况

    聊聊Spring循环依赖三级缓存是否可以减少为二级缓存的情况

    这篇文章主要介绍了聊聊Spring循环依赖三级缓存是否可以减少为二级缓存的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java基础之类型封装器示例

    Java基础之类型封装器示例

    这篇文章主要介绍了Java基础之类型封装器,结合实例形式分析了java类型封装相关原理与操作技巧,需要的朋友可以参考下
    2019-08-08

最新评论