Spring 表达式语言 (一)

Spring 表达式语言 (Spring Expression Language)是Spring 3.0开始引入的,它是一种强大、简洁的装配Bean的方式,能在运行时执行表达式将值(包括引用)注入到Bean。

SpEL的特性包括,

  1. 使用Bean的ID引用
  2. 调用方法或访问属性
  3. 进行算术、逻辑或关系运算
  4. 正则表达式
  5. 集合操作
  • 字面值

最简单的SpEL就是一个字面值,

使用${}。

如将数字8装配到下面的属性:

<property name="count“ value="#{8}" />

也可以是浮点数或科学记数法或是布尔值。下面是使用一个String类型的字面值。

<property name="name" value="#{'ChenZhongPu'}" />

使用只要满足单引号双引号间隔就可以,这样也是合法的:

<property name="name" value='#{"ChenZhongPu"}' />

你也可以和非SpEL表达式混用:

<property name="msg" value=”hello #{5}“ />

确实只使用字面值的SpEL是没有意义的,但这是复杂表达式的基础。

  • 引用Bean,方法和属性

SpEL的另一个基本功能是通过ID引用其他Bean,

<property name="son" value="#{tom}"

tom是另一个Bean的ID。当然,使用ref也可以完成这一工作。

使用tom的age属性装配,

<span style="font-size:18px;"><property name="son-age" value="#{tom.age}"</span>

当然,age必须有getter方法。

如果tom的类有个方法getBestLovedMoive()返回最喜欢的电影,

<property name="son-movie" value="#{tom.getBestLovedMovie()}" />

如果装配的希望是大写字母:

<property name="son-movie" value="#{tom.getBestLovedMovie().toUpperCase()}" />

这种情况最怕的就是出现空指针异常,

<property name="son-movie" value="#{tom.getBestLovedMovie()?.toUpperCase()}" />

使用?.可以完成null-safe存取。

  • T()运算符

使用T()运算符可以调用类作用域(静态)的方法和常量。

如:

<property name="pi" value="#{T(java.lang.Math).PI}" />
  • 算术运算符

除了支持+ - * / %,还支持 ^表示乘方算法。

使用起来很简单,如

<property name="test" value="#{tom.age - 18}" />

+还可以完成字符串的拼接。

<peoperty name=”fullname" value="#{tom.firstName + ' ' + tom.lastName}" />
  • 比较值

比较返回的都是布尔类型。由于 > <在XML里有特殊含义(在XML文件外使用SpEL也是可以的)。其文本类型如下:

使用==或eq是等价的。

  • 逻辑表达式

有and, or ,not(或!)三种。意思很明了,这里举个例子,

<property name="testlogic" value="#{tom.name == 'czp' and tom.age gt 18}" />
  • 条件表达式

和Java的三元运算符一样。

如:

<property name="ancestor" value="#{tom.age gt 20 ? tom : Jim}" />

这个运算的一个常用场景是检查一个值是否为null。

<span style="font-size:18px;"><property name="movie" value="#{tom.movie != null ? tom.movie : 'King Of Lion'}" /></span>

你可以使用简写方法:

<span style="font-size:18px;"><property name="movie" value="#{tom.movie != null ?: 'King Of Lion'}" /></span>
  • 正则表达式

使用matches对文本处理,返回布尔类型。

举个例子:

<property name="validPhone" value="#{tom.phone matches '[0-9]{11}'}" />
时间: 2024-08-01 05:14:08

Spring 表达式语言 (一)的相关文章

Spring学习笔记--Spring表达式语言SpEL

Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中.字面值我们可以在<property>元素的value属性中使用#{}界定符将值装配到Bean的属性中. <property name="count" value="#{5}" /> 浮点型数字一样可以出现在SpEL表达式中.

Spring基础系列6 -- Spring表达式语言(Spring EL)

Spring基础系列6 -- Spring表达式语言(Spring EL) 转载:http://www.cnblogs.com/leiOOlei/p/3543222.html 本篇讲述了Spring Expression Language —— 即Spring3中功能丰富强大的表达式语言,简称SpEL.SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂表达式,存取对象属性.对象方法调用等.所有的SpEL都支持XML和Annotation两种方式,格式:#{ SpEL exp

Spring表达式语言SpEL简介

Spring3引入了Spring表达式语言(Spring Expression Language,SpEL). SpEL有很多特性,比较常用的包括: 1.使用bean的id来引用bean, 下面这个例子就是将卧室这个bean通过SpEL注入到house这个bean的bedroom属性中. <bean id="bedroom" class="go.derek.Bedroom"/> <bean id="house" class=&q

Spring表达式语言 之 5.1 概述 5.2 SpEL基础(拾叁)

5.1  概述 5.1.1  概述 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式.存取对象图属性.对象方法调用等等,并且能与Spring功能完美整合,如能用来配置Bean定义. 表达式语言给静态Java语言增加了动态功能. SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用. 5.1.2  能干什么 表达式语言

spring表达式语言(SpEL)简述及Hello World示例

作为spring的基础模块之一,spring表达式语言模块(Spring Expression Language,简称SpEL)在运行时提供了查询和操作一个对象图的强大的表达式语言. Spring EL既可以通过XML被配置,也可以通过注解来进行配置.下面通过简单的例子来示范如何通过两种不同的方式配置SpEL从而注入String.整型和javabean数据. Spring EL依赖 项目通过maven进行管理,在maven的pom.xml配置文件中声明spring的核心依赖,maven将自动下载

开涛spring3(5.1&amp;5.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础

5.1  概述 5.1.1  概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式.存取对象图属性.对象方法调用 等等,并且能与Spring功能完美整合,如能用来配置Bean定义. 表达式语言给静态Java语言增加了动态功能. SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用. 5.1.2  能干什么 表达式语言一般是用最简单的形式完成最主

Spring表达式语言:SpEL语法

Spring表达式语言简称:SpEL,SpEL既可以独立于Spring容器使用,,也可以在Spring配置文件中使用,这样就大大简化了Spring的Bean配置,给配置文件起到了"减肥"的作用,下面开始总结SpEL语法 1:直接量表达式 直接量表达式也是SpEL最简单的表达式,如下: public class SpelGrammar { public static void main(String[]args) { // 创建一个ExpressionParser对象,用于解析表达式 E

开涛spring3(5.3) - Spring表达式语言 之 5.3 SpEL语法

5.3  SpEL语法 5.3.1  基本表达式 一.字面量表达式: SpEL支持的字面量包括:字符串.数字类型(int.long.float.double).布尔类型.null类型. 类型 示例 字符串 String str1 = parser.parseExpression("'Hello World!'").getValue(String.class); String str2 = parser.parseExpression("\"Hello World!\

开涛spring3(5.4) - Spring表达式语言 之 5.4在Bean定义中使用EL

5.4.1  xml风格的配置 SpEL支持在Bean定义时注入,默认使用“#{SpEL表达式}”表示,其中“#root”根对象默认可以认为是 ApplicationContext,只有ApplicationContext实现默认支持SpEL,获取根对象属性其实是获取容器中的Bean. 首先看下配置方式(chapter5/el1.xml)吧: <bean id="world" class="java.lang.String"> <construct