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 ...
随机推荐
- python基础--内置函数filter,reduce
movie_people=["sb+_alex","sb_wupeiqi","han"] # def filter_test(array): ...
- Photoshop画笔工具的使用
现在我们按下[B]从工具栏选择画笔工具,如果选中了铅笔就[SHIFT B]切换到画笔.然后按下[D],它的作用是将颜色设置为默认的前景黑色.背景白色.也可以点击工具栏颜色区的默认按钮(下左图红色箭头处 ...
- luogu4061 大吉大利,晚上吃鸡!
链接 最短路径\(dag\),一道好题. 题目大意:求一张图中满足下列要求的点对\((i,j)\)数量: 所有最短路径必定会经过 \(i\) 点和 \(j\) 点中的任意一点. 不存在一条最短路同时经 ...
- k8s手动安装-1
1.组网master可以使用双网卡,一个外网网卡连接外网,并且做proxy server,一个host-only网卡和node连接. 新版vitualbox配置host-only需要在主机网络管理器中 ...
- SSM项目web.xml等配置文件中如何查找类的全路径名?
如题, web.xml,applicationContext.xml 等配置文件中,有时不会出现自动提示类的名字,这时如何查找类的全路径名,如下图所示: 1.鼠标右键单击菜单栏Navigate选项,选 ...
- CSS中浮动属性float及清除浮动
1.float属性 CSS 的 Float(浮动),会使元素向左或向右移动,由于浮动的元素会脱离文档流,所以它后面的元素会重新排列. 浮动元素之后的那些元素将会围绕它,而浮动元素之前的元素将不会受到影 ...
- Linux 系统下文件夹与文件的读写可执行权限问题
linux是一个多用户操作系统,linux对文件系统内的所有文件,实行了严格的权限划分管理.防止没有权限的用户访问某个文件.linux文件或目录的权限分为 读.写.可执行三种权限.文件访问的用户类别分 ...
- Eclipse中安装和使用FindBugs
FindBugs在Eclipse的离线安装: 1 到http://findbugs.sourceforge.net/downloads.html下载20131115123549_nlpir_ict ...
- php面试专题---10、网络协议考点
php面试专题---10.网络协议考点 一.总结 一句话总结: 网络的考点其实就是这些:常见状态码,常见协议,osi七层模型,http和https 1.HTTP/1.1中,状态码200.301.304 ...
- Windows 环境下vue+webpack前端开发环境搭建
一.开发环境搭建 1.前端框架一般依赖node.js,我们首先要安装node.js. 2.由于许多npm 的源都在国外的地址,安装起来特别慢,所以我们这里利用淘宝的镜像服务器. 安装命令为:npm i ...