`

SpEL 参考

阅读更多
官方参考

特性概览
  • 字符表达式
  • 布尔和关系操作符
  • 正则表达式
  • 类表达式
  • 访问properties,arrays,lists,maps
  • 方法调用
  • 赋值
  • 调用构造器
  • 三元操作符
  • 变量
  • 用户自定义函数
  • 集合投影
  • 集合选择
  • 内联列表
  • 模板表达式


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
字符表达式:
@Test
public void test01() {	// 字符串表达式
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("new String('Hello, World').concat('!')");
	System.out.println(exp.getValue());
}

@Test
public void test02() {	// 字符串表达式
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("'HelloWorld'.bytes.length");  
	int length= (Integer) exp.getValue();
	System.out.println(length);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
布尔和关系表达式:
@Test
public void test03() {	// 布尔和关系表达式
	ExpressionParser parser = new SpelExpressionParser();
	EvaluationContext context = new StandardEvaluationContext(new java.util.Date());
	Expression exp = parser.parseExpression("#root.year + 1900 eq 2011");
	boolean flag = exp.getValue(context, Boolean.class);
	System.out.println(flag);
}

@Test
public void test04() {	// 布尔和关系表达式
	ExpressionParser parser = new SpelExpressionParser();
	EvaluationContext context = new StandardEvaluationContext(new java.util.Date());
	Expression exp = parser.parseExpression("!(#root.year + 1900 == 2011)");
	boolean flag = exp.getValue(context, Boolean.class);
	System.out.println(flag);
}

关系表达式语言中可以使用符号: ==, >=, <=, !, >, <
也可以使用eq, ge, le, not, gt, lt
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
正则表达式:
@Test
public void test05() {	// 正则表达式
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("'138-8000-4000' matches '\\d{3}-\\d{4}-\\d{4}'");
	boolean flag = exp.getValue(Boolean.class);
	System.out.println(flag);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
类表达式:
@Test
public void test06() {	// 类表达式
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("T(java.util.UUID).randomUUID().toString().toUpperCase()");
	String uuid = exp.getValue(String.class);
	System.out.println(uuid);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
访问properties,arrays,lists,maps:
@Test
public void test07() {	// 访问arrays
	String[] array = new String[] {"马勒", "格", "彼得"};
	StandardEvaluationContext context = new StandardEvaluationContext();
	context.setVariable("array", array);
	
	ExpressionParser parser = new SpelExpressionParser();
	String value = parser.parseExpression("#array[0]").getValue(context, String.class);
	System.out.println(value);
}

@Test
public void test08() {	// 访问list
	List<String> list = new ArrayList<String>(3);
	list.add("马勒");
	list.add("格");
	list.add("彼得");
	StandardEvaluationContext context = new StandardEvaluationContext();
	context.setVariable("list", list);
	ExpressionParser parser = new SpelExpressionParser();
	String value = parser.parseExpression("#list[1]").getValue(context, String.class);
	System.out.println(value);
}

@Test
public void test09() {	// 访问map
	Map<String, String> map = new HashMap<String, String>();
	map.put("first-name", "马勒");
	map.put("middle-name", "格");
	map.put("last-name", "彼得");
	StandardEvaluationContext context = new StandardEvaluationContext();
	context.setVariable("map", map);
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("#map['last-name']");
	String value = exp.getValue(context, String.class);
	System.out.println(value);
}

@Test
public void test09_2() {	// 访问Properties
	ExpressionParser parser = new SpelExpressionParser();
	EvaluationContext context = new StandardEvaluationContext(System.getProperties());
	Expression exp = parser.parseExpression("#root['user.dir']");		
	String userDir = exp.getValue(context, String.class);
	System.out.println("user dir :" + userDir);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
方法调用:
@Test
public void test10() {	// 方法调用
	// 静态方法和非静态方法都可以用
	String el = "T(java.util.Calendar).getInstance().getTimeInMillis()";
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression(el);
	String str = exp.getValue(String.class);
	System.out.println(str);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
赋值表达式:
@Test
public void test11() {	// 赋值
	List<String> list = new ArrayList<String>();
	list.add("");
	list.add("");
	list.add("");
	StandardEvaluationContext context = new StandardEvaluationContext(list);
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("#root[2] = '123'");
	String result = (String)exp.getValue(context);
	
	System.out.println(result);
	System.out.println(list.get(2));
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三元表达式:
@Test
public void test14() {	// 三元操作符
	ExpressionParser parser = new SpelExpressionParser();
	String result = parser.parseExpression("true?'love':'hate'").getValue(String.class);
	System.out.println(result);
}

@Test
public void test15() {	// 三元操作符
	ExpressionParser parser = new SpelExpressionParser();
	String name = parser.parseExpression("null?:'Unknown'").getValue(String.class);
	System.out.println(name); // 'Unknown'
}

@Test
public void test16() {	// 三元操作符
	class User {
		public String name;
	};
	EvaluationContext context = new StandardEvaluationContext(new User());
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("#root.name?.length()");
	Integer length = exp.getValue(context, Integer.class);
	System.out.println(length);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
使用变量:
@Test
public void test17() {	// 变量
	class User {
		public String name;
	};
	User u = null;
	StandardEvaluationContext context = new StandardEvaluationContext();
	context.setVariable("user", u = new User());
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("#user.name = 'Malege Peter'");
	String name = exp.getValue(context, String.class);
	System.out.println(name);
	System.out.println(u.name);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
用户自定义函数:
@Test
public void test18() throws SecurityException, NoSuchMethodException {	// 用户自定义函数
	class StringUtil {
		public String reverse(CharSequence s) {
			StringBuffer buffer = new StringBuffer(s);
			return buffer.reverse().toString();
		}
	};
	
	StandardEvaluationContext context = new StandardEvaluationContext(new StringUtil());
	context.registerFunction("reverse", StringUtil.class.getDeclaredMethod("reverse", new Class<?>[]{CharSequence.class}));
	
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("reverse('Hello, World.')");
	String str = exp.getValue(context, String.class);
	System.out.println(str);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
集合的选择:
@Test
public void test19() {	// 集合选择
	int[] primes = {1,3,5,7,11,13,17,19,23};
	EvaluationContext context = new StandardEvaluationContext(primes);
	
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("#root.?[#this le 11]");
	List<Integer> list = exp.getValue(context, List.class);
	System.out.println(list);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
集合的投影:
@Test
public void test20() {	// 集合投影
	class User {
		public String name;
		public String password;
		public User(String n, String p) {
			name = n; password = p;
		}
	};
	
	Map<Integer, User> map = new HashMap<Integer, User>();
	map.put(1, new User("zhang san", "1234"));
	map.put(2, new User("li si", "12345"));
	map.put(3, new User("wang wu", "****"));
	
	StandardEvaluationContext context = new StandardEvaluationContext();
	context.setVariable("map", map);
	
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("#map.![value.name]");
	List<String> list = exp.getValue(context, List.class);
	System.out.println(list);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
内联列表:
@Test
@Test
public void test21() {	// 内联列表
	ExpressionParser parser = new SpelExpressionParser();
	Expression exp = parser.parseExpression("{{1,2,3,4}, {5,6,7,8}}");
	List<List<Integer> > list = exp.getValue(List.class);
	
	for (List<Integer> is : list) {
		System.out.println(is);
	}
}
分享到:
评论

相关推荐

    EPSONRC+7.0 SPEL+语言参考

    EPSONRC+7.0 SPEL+语言参考 最近在做一个工业机器人相关的项目,里面涉及到了EPSON的SCARA机器人,网上相关的资料并不多,好不容易找到了这份用户指南,还是挺有用的,上传分享给有需要的人。

    SPEL+编程语言参考手册

    SPEL+编程语言参考手册中文版,很好的资源,很细致。

    爱普生EPSON机器人RC+7.3 SPEL+语言参考手册

    爱普生机器人的语言SPEL+的参考集合, 包含了从安全, 入门, 操作, GUI, SPEL+语言, 构建SPEL+应用, 机器人配置, 输入与输出, 远程控制, RS232C通讯, 实时IO, 视觉指引,模拟器, RC+的API, GUI Builder等等内容....

    cs_SPEL+Ref71_r2.pdf

    EPSON RC+ 7.0 (Ver.7.1) SPEL+ 语言参考 Rev.2 命令窗口 可在命令窗口使用。 程序 可在 SPEL+ 程序中作为语句使用。 函数 可作为函数使用 想学的朋友下载吧,自动化机器手。

    Spring表达式语言中文参考手册.docx

    Spring Expression Language (SpEL)中文文档。基于Spring4.x。

    EPSON RC+ 7.0 SPEL+语言参考指令.pdf

    爱普生机器人指令手册

    EPSON RC+ 7.0 用户指南Spel

    EPSON RC+ 7.0 用户指南Spel,爱普生RC+7.0 中文版,是一个非常好的参考文档

    Spring表达式语言SpEL用法详解

    主要介绍了spring表达式语言SpEL用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring实战之SpEl语法实例详解

    主要介绍了Spring实战之SpEl语法,结合实例形式分析了SpEl创建数组、集合及解析变量等相关操作原理与实现技巧,需要的朋友可以参考下

    SpringBoot SpEL语法扫盲与查询手册的实现

    主要介绍了SpringBoot SpEL语法扫盲与查询手册的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Spring组件开发模式支持SPEL表达式

    今天小编就为大家分享一篇关于Spring组件开发模式支持SPEL表达式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Spring实战之Bean定义中的SpEL表达式语言支持操作示例

    主要介绍了Spring实战之Bean定义中的SpEL表达式语言支持操作,结合实例形式分析了Bean定义中的SpEL表达式语言操作步骤与实现技巧,需要的朋友可以参考下

    基于SpringBoot、Spring表达式语言 (SpEL)、annotation的操作日志框架+源代码+文档说明

    # opt-log 基于SpringBoot、Spring表达式语言 (SpEL)、annotation的操作日志 ### 简介 * 使用annotation来标注方法,标记操作内容 ...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    如何使用SpEL表达式实现动态分表查询

    主要介绍了如何使用SpEL表达式实现动态分表查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring 3.0-API 参考手册

    Spring 3.0-API 参考手册 Spring 3.0是Spring框架的一次重大更新,而根据SpringSource副总裁Shaun Connolly的描述,Spring框架是当下最流行的Java开发框架。 全新的Spring 3.0提供了全面的RESTful Web服务支持,...

    springMongodb参考文档中文版

    基于JSON的SpEL表达式查询 11.3.5。类型安全的查询方法 11.3.6。全文搜索查询 11.3.7。预测 11.4。杂 11.4.1。CDI集成 12.反应性MongoDB存储库 12.1。介绍 12.2。活性成分库 12.3。用法 12.4。特征 12.4.1。地理空间...

    spring-framework-reference 3.0

    Spring 3.0中,新的表达式语言名叫Spring Expression Language(SpEL,直译就是Spring表达式语言)。Shaun将其描述为“嵌入在Spring编程模型上的,可以用来在Spring项目之间描述任务以及配置的微型脚本语言。SpEL...

    springboot参考指南

    SpEL表达式条件 xvi. 37. WebSockets xvii. 38. 接下来阅读什么 6. V. Spring Boot执行器: Production-ready特性 i. 39. 开启production-ready特性 ii. 40. 端点 i. 40.1. 自定义端点 ii. 40.2. 健康信息 iii. 40.3...

Global site tag (gtag.js) - Google Analytics