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 ...
随机推荐
- hdu 4082 Hou Yi's secret(暴力枚举)
Hou Yi's secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- postgresql windows 服务启动失败
1命令行 启动服务 pg_ctl -D "C:\Program Files\PostgreSQL\9.1\data" start 2 查看状态 pg_ctl -D "C: ...
- phpStorm 配置PHP_CodeSniffer自动检查代码
环境 ubuntu18.4 phpstorm php7.2 最正确安装方法 sudo apt-get install php-codesniffer 一.composer安装PHP_CodeSniff ...
- OC + RAC (三) 信号中的信号
-(void)_test3{ RACSubject *signalofsignal = [RACSubject subject]; //信号中的信号(也就是发送的数据是信号) RACSubject * ...
- linux-Centos 7下bond与vlan技术的结合[推荐]
https://blog.51cto.com/sf1314/2073519 服务器eth0与eth1作bonding,捆绑成bond0接口,服务器对端交换机端口,同属于100.101号vlan接口 v ...
- php count_chars()函数 语法
php count_chars()函数 语法 作用:返回一个字符串,包含所有在字符串中使用过的不同字符.直线电机选型 语法:count_chars(string,mode) 参数: 参数 描述 str ...
- C# 获取路径中,文件名、目录、扩展名等
string path = "C:\\dir1\\dir2\\foo.txt"; string str = "GetFullPath:" + Path.GetF ...
- SpringBoot怎么访问html文件
pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 和风api爬取天气预报数据
''' 和风api爬取天气预报数据 目标:https://free-api.heweather.net/s6/weather/forecast?key=cc33b9a52d6e48de85247779 ...
- 后端技术杂谈11:十分钟理解Kubernetes核心概念
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 本文转自 https://github.com/h2pl/Java-Tutorial 喜欢的 ...