Spring学习笔记(14)——SpEL
- public class HelloWorld {
- public static void main(String[] args) {
- //构造上下文:准备比如变量定义等等表达式运行需要的上下文数据
- EvaluationContext context = new StandardEvaluationContext();
- //创建解析器:提供SpelExpressionParser默认实现
- ExpressionParser parser = new SpelExpressionParser();
- //解析表达式:使用ExpressionParser来解析表达式为相应的Expression对象
- Expression expression =
- parser.parseExpression("('Hello' + ' World').concat(#end)");
- //设置上下文中的变量的值
- context.setVariable("end", "!SpringEL");
- //执行表达式,获取运行结果
- String str = (String)expression.getValue(context);
- System.out.println("the str="+str);
- }
- }

ExpressionParser
接口使用的ParserContext接口用于定义字符串表达式是不是模板,及模板开始与结束字符,示例如下:
- public static void main(String[] args) {
- ExpressionParser parser = new SpelExpressionParser();
- //自定义一个解析模板的规则
- ParserContext parserContext = new ParserContext() {
- public boolean isTemplate() { return true; }
- public String getExpressionPrefix() { return "#{"; }
- public String getExpressionSuffix() { return "}"; }
- };
- String template = "#{'Hello '}#{'World!'}";
- Expression expression = parser.parseExpression(template, parserContext);
- System.out.println( expression.getValue());
- }
- :String str1 = parser.parseExpression("'Hello World!'").getValue(String.class);
- :String str2 = parser.parseExpression("\"Hello World!\"").getValue(String.class);
- :int int1 = parser.parseExpression("1").getValue(Integer.class);
- :float float1 = parser.parseExpression("1.1").getValue(Float.class);
- :boolean true1 = parser.parseExpression("true").getValue(boolean.class);
- :Object null1 = parser.parseExpression("null").getValue(Object.class);
:
- ExpressionParser parser = new SpelExpressionParser();
- EvaluationContext context = new StandardEvaluationContext();
- context.setVariable("variable", "hello1");
- context.setVariable("variable", "hello2");
- String result1 = parser.parseExpression("#variable").getValue(context, String.class);
- System.out.println("r1=="+result1);
- );
- String result2 = parser.parseExpression("#root-1").getValue(context, String.class);
- System.out.println("r2=="+result2);
- String result3 = parser.parseExpression("#this").getValue(context, String.class);
- System.out.println("r3=="+result3);
- ExpressionParser parser = new SpelExpressionParser();
- StandardEvaluationContext context = new StandardEvaluationContext();
- Method parseInt =
- Integer.class.getDeclaredMethod("parseInt", String.class);
- context.registerFunction("regParseInt", parseInt);
- context.setVariable("parseInt2", parseInt);
- String expression1 = "#regParseInt('3') == #parseInt2('3')";
- boolean result =
- parser.parseExpression(expression1).getValue(context, boolean.class);
- System.out.println("result="+result);
- :parser.parseExpression("#root=‘Hi'").getValue(context, String.class);
- :parser.parseExpression("#this=‘Hi'").getValue(context, String.class);
- :context.setVariable("#variable", "variable");
- UserModel um = new UserModel();
- um.setUuid("User1");
- um.setName("UserName1");
- ExpressionParser parser = new SpelExpressionParser();
- StandardEvaluationContext context = new StandardEvaluationContext();
- context.setVariable("um",um);
- //取值
- Expression expression = parser.parseExpression("'uuid='+#um.uuid + ',name='+#um.name");
- String v = expression.getValue(context,String.class);
- System.out.println("v=="+v);
- //赋值
- expression = parser.parseExpression("'uuid='+(#um.uuid='newUser') + ',name='+#um.name");
- v = expression.getValue(context,String.class);
- System.out.println("v2=="+v);
- 输出结果:
- v==uuid=User1,name=UserName1
- v2==uuid=newUser,name=UserName1
- ApplicationContext ctx = new ClassPathXmlApplicationContext(
- new String[] {"applicationContext.xml"});
- ExpressionParser parser = new SpelExpressionParser();
- StandardEvaluationContext context = new StandardEvaluationContext();
- context.setBeanResolver(new BeanFactoryResolver(ctx));
- String result1 =
- parser.parseExpression("@myBean.test()").getValue(context, String.class);
new
SpelExpressionParser();
class);
out.println(result1);
#collection.![#this.name]").getValue(context1, Collection.class);
- UserModel um1 = new UserModel();
- um1.setUuid("u1");
- um1.setName("u1Name");
- UserModel um2 = new UserModel();
- um2.setUuid("u2");
- um2.setName("u2Name");
- Map<String, UserModel> map = new HashMap<String, UserModel>();
- map.put(um1.getUuid(),um1);
- map.put(um2.getUuid(),um2);
- //2.测试Map投影
- EvaluationContext context1 = new StandardEvaluationContext();
- ExpressionParser parser = new SpelExpressionParser();
- context1.setVariable("map", map);
- Collection<String> result1 =
- parser.parseExpression("#map.![#this.value.name]").getValue(context1, Collection.class);

- EvaluationContext context1 = new StandardEvaluationContext();
- ExpressionParser parser = new SpelExpressionParser();
- context1.setVariable("collection", collection);
- Collection<String> result1 =
- parser.parseExpression("#collection.?[#this.uuid.equals('u1')]").getValue(context1, Collection.class);
- EvaluationContext context1 = new StandardEvaluationContext();
- ExpressionParser parser = new SpelExpressionParser();
- context1.setVariable("map", map);
- Map<String,UserModel> result1 =
- parser.parseExpression("#map.?[#this.key=='u1']").getValue(context1, Map.class);
- <bean id="numberGuess" class="org.spring.samples.NumberGuess">
- <property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>
- </bean>
- <bean id="t1" class="cn.javass.spring3.hello.T2">
- <property name="value" value="#{ T(java.lang.Math).random() * 100.0 }"/>
- </bean>
- <bean id="t2" class="cn.javass.spring3.hello.T2">
- <property name="value" value="#{ T(Double).parseDouble(t1.value) -1 }"></property>
- </bean>
- public class SpELBean {
- @Value ("#{ T(java.lang.Math).random() * 100.0 }")
- private String value;
- //setter和getter由于篇幅省略,自己写上
- }
Spring学习笔记(14)——SpEL的更多相关文章
- Spring学习笔记--在SpEL中筛选集合
要用到Spring的util(包括util:list等),xml文件中的beans中需要添加一些有关util的信息: <?xml version="1.0" encoding ...
- Spring学习笔记(一)
Spring学习笔记(一) 这是一个沉淀的过程,大概第一次接触Spring是在去年的这个时候,当初在实训,初次接触Java web,直接学习SSM框架(当是Servlet都没有学),于是,养成了一个很 ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- mybatis学习笔记(14)-查询缓存之中的一个级缓存
mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...
- Spring学习笔记(七)模拟实际开发过程的调用过程XML版-Setter方式注入
模拟实际开发过程的调用过程XML版-Setter方式注入 源码获取github [TOC] 1.项目结构 2.jar包跟上个一样 3.重写set方法 UserServiceImpl.java 1234 ...
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法
Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法 Ext.Net GridPanel可以进行Group操作,例如: 如何启用Grouping功能呢?只需要在Grid ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- SQL反模式学习笔记14 关于Null值的使用
目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: ...
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
随机推荐
- 解决pycharm运行py文件时只有unittest选项的方法
有时候在编完脚本开始运行时,发现某个py脚本右键运行的选项不是run,二是run in unittest,试过很多方法都不能很好的去除,主要是因为脚本中含有test字符串,一种解决方法是将脚本中所有的 ...
- BZOJ2440/洛谷P4318 [中山市选2011]完全平方数 莫比乌斯函数
题意:找到第k个无平方因子数. 解法:这道题非常巧妙的运用了莫比乌斯函数的性质! 解法参考https://www.cnblogs.com/enzymii/p/8421314.html这位大佬的.这里我 ...
- php io
1.获取目录下文件,不包括子目录 //获取某目录下所有文件.目录名(不包括子目录下文件.目录名) $handler = opendir($dir); while (($filename = readd ...
- Vue的自定义滚动,我用el-scrollbar
弄了一个持续更新的github笔记,可以去看看,诚意之作(本来就是写给自己看的--)链接地址:Front-End-Basics 此篇文章的地址:Vue的自定义滚动,我用el-scrollbar 基础笔 ...
- Facebook超过1亿用户数据泄露,疑与中国黑客组织有关?
Facebook又向用户投放了另一个重磅炸弹,承认其超过1亿用户中的所有用户都应该认定恶意的第三方垃圾信息以及强大的黑客组织泄露了他们的公开个人资料信息. 周三,Facebook首席执行官马克扎克伯格 ...
- 获取kingeditor编辑器内容
//初始化编辑器 var editorMini = KindEditor.create('.editor-mini',{ width : '70%', height : '250px', resize ...
- Task7.卷积神经网络
卷积定义: 所谓卷积,其实是一种数学运算.但是在我们的学习生涯中,往往它都是披上了一层外衣,使得我们经常知其然不知其所以然.比如在信号系统中,他是以一维卷积的形式出现描述系统脉冲响应.又比如在图像处理 ...
- XMLUtil
package Testlink; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; imp ...
- Python3解leetcode Number of Boomerangs
问题描述: Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple ...
- python 全栈开发,Day45(html介绍和head标签,body标签中相关标签)
一.html介绍 1.web标准 web准备介绍: w3c:万维网联盟组织,用来指定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构 ...