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

网友投稿 353 2023-07-06

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 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.parshttp://eExpression("#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程序设计有所帮助。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Maven发布封装到中央仓库时候报错:no default secret key
下一篇:Spring Boot整合Spring Cache及Redis过程解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~