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基于springboot教务管理系统
Java基于springboot教务管理系统本文件感兴趣的可以参考一下,帮助学校管理教务系统,用一个帐号解决学校教务...
- Java EE企业级应用开发教程Spring+Spring MVC+MyBatis实验报告
JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis实验报告本文件感兴趣的可以参考一下。...
- springBootNoMaven实现定时任务功能
springBootNoMaven本文件感兴趣的可以参考一下,不使用maven环境,创建springboot项目,实现了定时任务功能简单...
- agilebpm-base-spring-boot.rar
agilebpm-base-spring-boot.rar本文件感兴趣的可以参考一下,基于activiti实现的审批工作流web端项目。...
- 数据库课设论文加源码mysql Java spring
数据库课设论文加源码mysqlJavaspring绿色版,数据库课程设计舍友信息管理系统,mysql,javaspring整篇论文。...
- 基于SpringMVC,Spring,Mybatis,BootStrap教务管理系统
基于SpringMVC,Spring,Mybatis,BootStrap教务管理系统绿色版,基础信息管理、系统权限管理、版本管理、子系统...
- SpringBoot健身房管理系统
SpringBoot健身房管理系统绿色版,springboot+MySQL+thymeleaf。...
- 使用springboot2.x整合shiro包含sql数据库
使用springboot2.x整合shiro包含sql数据库例子源代码。...