第 31 章 SpEL
概述
Spring Expression Language (SpEL) 是 Spring 3 提供的对象图形导航语言,可用于在路由中构造 predicates 和表达式。SpEL 的一个显著功能是您可以从 registry 访问 Bean 的简易功能。
语法
SpEL 表达式必须使用占位符语法 #{SpelExpression}
,以便可以嵌入纯文本字符串(换句话说,SpEL 具有表达式模板)。
SpEL 还可以使用 @BeanID
语法在 registry (通常是 Spring registry)中查找 bean。例如,如果一个 bean 带有 ID、headerUtils
,以及方法 count ()
(计算当前消息上的标头数量),您可以在 SpEL predicate 中使用 headerUtils
bean,如下所示:
#{@headerUtils.count > 4}
添加 SpEL 软件包
要在路由中使用 SpEL,您需要将对 camel-spring
的依赖关系添加到项目中,如 例 31.1 “添加 camel-spring 依赖项” 所示。
例 31.1. 添加 camel-spring 依赖项
<!-- Maven POM File --> <properties> <camel-version>2.23.2.fuse-7_10_0-00018-redhat-00001</camel-version> ... </properties> <dependencies> ... <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-spring</artifactId> <version>${camel-version}</version> </dependency> ... </dependencies>
变量
表 31.1 “SpEL 变量” 列出使用 SpEL 时可访问的变量。
变量 | 类型 | 描述 |
---|---|---|
|
| 当前交换是 root 对象。 |
|
| 当前交换。 |
|
| 当前交换的 ID。 |
|
| 交换异常(如果有)。 |
|
| 故障消息(如果有)。 |
|
| 交换的 In 消息。 |
|
| 交换的 Out 消息(若有)。 |
|
| Exchange 属性。 |
|
| 由名称 键键的交换 属性。 |
|
| 由 名称 密钥的交换属性,转换为类型类型。 |
XML 示例
例如,要只选择其 Country
标头具有值 USA
的消息,您可以使用以下 SpEL 表达式:
<route> <from uri="SourceURL"/> <filter> <spel>#{request.headers['Country'] == 'USA'}}</spel> <to uri="TargetURL"/> </filter> </route>
Java 示例
您可以在 Java DSL 中定义相同的路由,如下所示:
from("SourceURL") .filter().spel("#{request.headers['Country'] == 'USA'}") .to("TargetURL");
以下示例演示了如何将 SpEL 表达式嵌入到纯文本字符串中:
from("SourceURL") .setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}")) .to("TargetURL");