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 ...
随机推荐
- c# 匿名委托
using System; namespace AnonymousMethod { delegate void ArithmeticOperation(double operand1, double ...
- 修改图片尺寸网站https://www.yasuotu.com/
修改图片尺寸网站https://www.yasuotu.com/
- $_POST 和 php://input 的区别
手册中摘取的几句话: 当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时, ...
- Vue.js 技术揭秘学习 (3) render
Vue 的 _render 方法是实例的一个私有方法,它用来把实例渲染成一个虚拟 Node ,返回的是一个VNode 在 Vue 的官方文档中介绍了 render 函数的第一个参数是 createE ...
- bzoj4127 Abs 树链剖分+线段树+均摊分析
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4127 题解 首先区间绝对值和可以转化为 \(2\) 倍的区间正数和 \(-\) 区间和.于是问 ...
- Java数组重修,猜数小游戏改进和打印正三角形
数组重修,猜数小游戏 要求:从键盘输入一个数,判断数组是否包含此数,运用随机数 我们可能会这样写 import java.util.Random; import java.util.Scanner; ...
- RedisTemplate 事务处理方法 watch multi exec 的使用
@Autowired RedisTemplate<String,String> redisTemplate; redisTemplate.execute(new SessionCallba ...
- Beats:如何创建一个定制的Elastic Beat
Beats作为Elastic Stack家族中重要的部分.它可以和方便地让我们把我们的数据发送到Elasticsearch或Logstash之中.如果我们想要生成自己的Beat,请使用GitHub的b ...
- JIRA之两大统计图讲解
一.创建与解决的问题-状态统计图 配置方式 理解该统计图 横坐标 x:时间 纵坐标 y:issue数量 统计图示解读: A.随着时间的推移,创建的问题数(红线)减少,修复问题数(绿线)增加,标志着版本 ...
- 监听UDP端口
功能:监听服务器的UDP端口,输出端口接收的数据 #encoding:utf-8 import socket global udp global ip global port def listen_p ...