购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5 表达式语言SpEL

Spring Expression Language(SpEL)是一种强大的表达式语言,支持在运行时查询和操作对象图。其语法与Unified EL类似,但提供了额外的功能,特别是方法调用和基本的字符串模板功能。

虽然还有其他几种可用的Java表达式语言,如OGNL、MVEL、JBoss EL等,但Spring表达式语言的创建是为了向Spring社区提供单一支持的表达式语言,可以在所有Spring产品中使用SpEL。

SpEL的语言特性是由Spring项目中的需求驱动的,基于Eclipse的Spring Tool Suite中的代码自动完成。也就是说,SpEL基于一种与技术无关的API,允许在需要时集成其他表达式语言实现。

3.5.1 SpEL概述

SpEL并不与Spring直接相关,可以独立使用。

SpEL表达式语言支持的功能除文本表达、布尔和关系运算符、正则表达式、类表达式,以及访问属性、数组、列表、Map外,还有调用方法、分配、调用构造函数、bean引用、数组构建、内联列表、内联Map、三元操作符、变量、用户定义的功能、集合投影、集合选择和模板化的表达式。

3.5.2 表达式接口

以下代码引入了SpEL API来评估文本字符串表达式“Hello World”。

消息变量的值只是简单的“Hello World”。使用的SpEL类和接口位于org.springframework.expression包及其子包(如spel.support)中。在这个例子中,表达式字符串是由单引号引起来的文本字符串,Expression接口负责评估表达式字符串。当分别调用parser.parseExpression和exp.getValue时,可能会抛出ParseException和EvaluationException两个异常。

SpEL支持很多功能,如调用方法、访问属性和调用构造函数。

1.调用方法

可以在字符串上调用concat方法,其示例为:

消息变量的值现在为“Hello World!”。

2.访问属性

可以调用String的Bytes属性,其示例为:

SpEL还支持使用标点符号的嵌套属性,其示例为:

3.调用构造函数

字符串的构造函数可以被调用,其示例为:

3.5.3 对于bean定义的支持

SpEL表达式可以与XML或基于注解的配置元数据一起使用来定义BeanDefinitions。在这两种情况下,定义表达式的语法形式都是#{<expression string>}。

1.基于XML的配置

可以使用以下表达式来设置属性或构造函数的参数值。

变量systemProperties是预定义的,所以可以在表达式中使用,如以下代码。

也可以通过名称引用其他bean属性,如以下代码。

2.基于注解的配置

@Value注解可以放在字段、方法及构造函数参数中,以指定默认值。

以下是一个设置字段变量默认值的例子。

以上示例等价于在属性的setter方法上设置默认值。

自动装配的方法和构造函数也可以使用@Value注解。

3.5.4 实战:使用SpEL

本小节使用SpEL来演示一个“商品费用结算”的例子,该例子通过SpEL表达式来筛选数据。

例子源码在expression-language目录下。

1.自定义领域对象

创建一个新类Item代表商品,其代码为:

创建一个新类ShopList代表商品清单,其代码为:

创建一个新类Tax代表商品税率,其代码为:

2.配置文件

定义Spring应用的配置文件spring.xml,这里的SpEL表达式是基于XML来定义的。

3.spel.properties文件

定义spel.properties,用于演示读取.properties文件的场景。

4.定义应用类Application

Application类定义如下。

5.运行应用

运行Application类,即可在控制台中看到如下信息。 8Oj106gfJCwqSEttffcjAqnoEXswLTsKgi6QK+u7xO5KnDePTkQNE0rzVQEC4kV5

点击中间区域
呼出菜单
上一章
目录
下一章
×