文章目录
Spring 表达式语言 - SpEL
1、什么是SpEL
Spring表达式语言(简称SpEL)是一种功能强大的表达式语言,支持在运行时查询和操纵对象图。语言语法与Unified EL相似,但提供了其他功能,最著名的是方法调用和基本的字符串模板功能。
尽管还有其他几种Java表达式语言可供使用,例如OGNL,MVEL和JBoss EL,但Spring表达式语言的创建是为了向Spring社区提供一种受良好支持的表达式语言,该语言可用于该版本中的所有产品。春季投资组合。它的语言功能受Spring产品组合中项目的要求驱动,包括基于Eclipse的Spring Tool Suite中代码完成支持的工具要求。也就是说,SpEL基于与技术无关的API,允许在需要时集成其他表达语言实现。
虽然SpEL是Spring产品组合中表达评估的基础,但它并不直接与Spring绑定,可以独立使用。为了自成一体,本章中的许多示例都将SpEL当作一种独立的表达语言来使用。这需要创建一些自举基础结构类,例如解析器。大多数Spring用户将不需要处理这种基础结构,而只需要编写表达式字符串来进行评估。这种典型用法的一个示例是将SpEL集成到创建XML或基于注释的Bean定义中,如用于定义Bean定义的表达式支持部分中所示。
2、表达式语言支持以下功能
- 文本
- 布尔运算符和关系运算符
- 常用表达式
- 类表达式
- 访问属性,数组,列表,映射
- 方法调用
- 关系运算符
- 分配
- 调用构造函数
- Bean特性
- 数组构造器
- 内联List
- 内联Map
- 三元运算符
- 变量
- 用户自定义函数
- 集合投影
- 集合选择器
- 模板表达式
3、使用Spring 的SpEL 进行简单构建
表示文本
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'");
String message = (String) exp.getValue();
提供给用户使用的包位于org.springframework.expression
,spel.support
中
ExpressionParser
负责解析表达式
4、调用方法
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'.concat('!')");
String message = (String) exp.getValue();
得到的message
值为Hello World!
5、级联嵌套和公共属性
ExpressionParser parser = new SpelExpressionParser();
// invokes 'getBytes().length'
Expression exp = parser.parseExpression("'Hello World'.bytes.length");
int length = (Integer) exp.getValue();
System.out.println(length);
将会输出11
6、调用构造函数
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("new String('hello world').toUpperCase()");
String message = exp.getValue(String.class);
System.out.println(message);
将会得到 HELLO WORLD
7、布尔运算
Expression exp = parser.parseExpression("name == 'Nikola Tesla'");
boolean result = exp.getValue(context, Boolean.class); // evaluates to true