Spring SpEL 中的EvaluationContext 及Root
来源:互联网 发布:centos版本查看命令 编辑:程序博客网 时间:2024/06/06 10:38
理解:
EvaluationContext可以理解为parser 在这个环境里执行parseExpression解析操作,比如说我们现在往ctx(一个EvaluationContext )中放入一个 对象list (注:假设list里面已经有数据,即list[0]=true).
ctx.setVariable("list" , list);//可以理解为往ctx域 里放了一个list变量
接下来要想获取或设置list的值都要在ctx范围内才能找到:
(!!!!! #号用来取通过setVariable()放进去的变量)
parser.parseExpression("#list[0]").getValue(ctx);//在ctx这个环境里解析出list[0]的值parser.parseExpression("#list[0]").setValue(ctx , "false");//在ctx这个环境中奖 list[0]设为false
假如我们又往ctx中放入一个person对象(假设person已经实例化并且person.name的值是fc)
ctx.setVariable("p", person);
那么取其中name属性要像下面这样:
parser.parseExpression("#p.name").getValue(ctx);//结果是 fc
但是若是我们将ctx的root设为person 取name的时候就可以省略root对象这个前缀了
//StandardEvaluationContext是EvaluationContext的子类 提供了setRootObject方法((StandardEvaluationContext)ctx2).setRootObject(person);parser.parseExpression("name").getValue(ctx2); //访问rootobject即person的属性那么 结果:fc
当然其实也可以完全不用ctx直接用下面的方式活得name:
parser.parseExpression("name").getValue(person);//在person上解析name属性 即可得到 fc
下面贴出我实验时的代码:
//创建一个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(6 , "孙悟空12", new Date()); exp = parser.parseExpression("name"); //以指定对象作为root来计算表达式的值 //相当于调用person.name表达式的值 exp.setValue(person, "fc"); //将person 对象的 name属性设为 fc,没有这一句下面就会输出 孙悟空12 System.out.println("以persn为root,name表达式的值是: " + exp.getValue(person , String.class)); exp = parser.parseExpression("name=='fc'"); StandardEvaluationContext ctx = new StandardEvaluationContext(); ctx.setRootObject(person); //以指定Context来计算表达式的值 System.out.println(exp.getValue(ctx , Boolean.class));//true 此时都是 fc List<Boolean> list = new ArrayList<Boolean>(); list.add(true); EvaluationContext ctx2 = new StandardEvaluationContext(); //将list设置成EvaluationContext的一个变量 ctx2.setVariable("list" , list); ctx2.setVariable("p", person); ((StandardEvaluationContext) ctx2).setRootObject(person); //修饰list变量的第一个元素的值 System.out.println(parser.parseExpression("#list[0]").getValue(ctx2));//true parser.parseExpression("#list[0]").setValue(ctx2 , "false"); //修改 现在变为false 下面输出也是false //list集合的第一个元素被改变 System.out.println("list集合的第一个元素为: " + list.get(0)); System.out.println(parser.parseExpression("#p.name").getValue(ctx2));//fc System.out.println(parser.parseExpression("name").getValue(ctx2));//fc
1 0
- Spring SpEL 中的EvaluationContext 及Root
- Spring中的SpEL
- Spring 中的SpEL
- spring中的spel表达式
- spring中的spel表达式语言
- spring中的spel表达式语言
- spring中的spel表达式语言
- spring中的spel表达式语言
- spring中的spel表达式语言
- spring工厂方法配置bean及spEl
- spring SpEL
- spring SpEL
- Spring --- SpEL
- Spring SpEL
- Spring - SpEL
- Spring-SpEL
- spring-SpEL
- Spring---SpEL
- OMCAT中可以限制某些IP访问
- 第十一周项目1--验证算法1层次遍历算法的验证
- c语言指向结构体数组的指针
- 不敢死队问题
- 用swift写一个悬浮的searchbar
- Spring SpEL 中的EvaluationContext 及Root
- poj入门水题整理7
- 一、绑定服务介绍
- Coding:简单介绍视音频采样和量化01.
- jquery中html、val与text三者属性取值的联系与区别介绍
- 一、AIDL介绍
- spring四种依赖注入方式
- VS2013中使用fopen,fscanf出现安全性问题
- JSON数据详细的学习