`

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+编程语言参考手册**详细介绍了如何使用SPEL+来编写高效的程序,以充分发挥EPSON RC+系列机器人的潜力。 ### SPEL+编程语言特点 1. **易于学习和使用:**SPEL+的设计理念是让用户能够快速上手并高效地...

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

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

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

    《爱普生RC+ 7.0 SPEL+语言参考指令》是爱普生公司为用户提供的一款编程手册,专门针对其旗下的机器人系统。SPEL+(Sequential Program Execution Language Plus)是一种高级编程语言,用于控制爱普生机器人进行精确...

    EPSON_SPEL+_Lite_Language_Ref-RC170_RC180(R52).pdf

    ### EPSON SPEL+ Lite 语言参考指南 #### 前言 爱普生机器人编程语言(SPEL+)是专为爱普生机器人设计的一种高级编程语言,旨在简化机器人的控制与操作流程。本篇文章将从文档的标题、描述、标签以及部分内容出发...

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

    ### Spring 表达式语言 (SpEL) 中文参考手册概览 #### 一、Spring SpEL 概念与用途 Spring SpEL(Spring Expression Language)是一种强大的表达式语言,用于处理运行时查询和操作对象图。SpEL 的设计目标是提供一...

    cs_SPEL+Ref71_r2.pdf

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

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

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

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

    SpringBoot SpEL语法扫盲与查询手册的实现 SpringBoot SpEL语法扫盲与查询手册的实现是...SpEL语法扫盲与查询手册的实现对大家的学习或者工作具有一定的参考学习价值,需要的朋友们可以通过示例代码来学习和实践。

    spring2.0中文开发参考手册(CHM)

    《Spring 2.0中文开发参考手册》是针对Spring框架2.0版本的一份详尽指南,旨在帮助开发者深入理解并充分利用Spring 2.0的新特性与改进。Spring框架是Java开发中的一个核心组件,尤其在企业级应用中广泛使用,它通过...

    EPSON RC+ 7.0 用户指南Spel

    爱普生RC+ 7.0用户指南是爱普生公司为其机器人系统用户准备的官方文档,涵盖了机器人的...这份文档是用户在使用爱普生机器人系统时不可或缺的参考资料,能够帮助用户安全有效地完成机器人系统的安装、操作与维护工作。

    Spring 3.0-API 参考手册

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

    spring-framework-reference2.5.2中文开发参考手册.pdf

    3. **Spring Expression Language (SpEL)**:2.5版引入了SpEL,这是一个强大的表达式语言,用于在运行时查询和操作对象图。它可以用于配置文件中的属性绑定,以及在AOP切面中进行动态决策。 4. **XML配置的简化**:...

    spring2.0中文开发参考手册.chm.zip

    《Spring 2.0 中文开发参考手册》是针对Java开发者的重要参考资料,它全面地介绍了Spring框架2.0版本的核心特性和使用方法。Spring作为一款轻量级的Java企业级应用框架,以其强大的依赖注入(Dependency Injection,...

    spring framewok 4参考文档

    Spring Framework是Java领域中一个非常重要的开源框架,自2003年问世以来,一直是Java开发者使用最为广泛的...通过阅读Spring Framework的参考文档,开发者可以了解到框架的最新动态,为开发工作提供坚实的技术支持。

    spring2.0中文开发参考手册.chm

    9. **Spring表达式语言(Spring Expression Language, SpEL)**:SpEL是一种强大的表达式语言,用于在运行时查询和操作对象图。 10. **JSR-330注解支持**:Spring 2.0引入了对JSR-330标准注解的支持,如`@Inject`和...

    Spring2.5-中文参考手册(这是个chm格式的文档)

    7. **Spring表达式语言(Spring Expression Language, SpEL)**:SpEL是Spring提供的强大表达式语言,用于在运行时查询和操作对象图。它在处理Bean属性、方法调用、条件判断等方面非常有用。 8. **国际化(I18N)支持**...

    spring2.5.2开发参考手册pdf,spring2.5.ppt,Spring2.5-中文参考手册.chm

    它可能会重点介绍新特性,如XML配置的简化(如@Annotations)、Bean定义的增强(如Prototype scope和Lazy initialization)、表达式语言(Spring Expression Language, SpEL)以及对JSR-303 Bean Validation的支持。...

Global site tag (gtag.js) - Google Analytics