Spring3 - Spring Expression Language

1.简介

 

有别于传统的Spring静态配置,Spring Expression Language的值是在运行时,也就是Spring容器加载时计算出来的。

 

主要的功能包含:

1)ID引用Bean,执行对象的方法/获取对象的属性

2)数学、关系、逻辑运算

3)正则表达式匹配

4)操作集合

 

2.使用及举例

SpEL以"#{...}"进行标识。

1)ID引用Bean,执行对象的方法/获取对象的属性

--常量

整型                    value="#{5}"

浮点型                 value="#{5.1}"

科学计数法           value="#{1E4}"

字符型                 value="hello, #{'java world'} !"

布尔型                 value="#{true}"

 

--ID引用             

   value="#{beanID}" <==>  ref="beanID"

--获取对象的属性 

   value="#{beanID.property}"

--执行对象的方法 

   value="#{beanID.getProperty()}"

--获取对象属性/执行对象方法时支持多个连续使用,也支持混合使用

   value="#{beanID.property.toUpperCase()}" 

   value="#{beanID.getProperty().toUppserCase()}"

--空指针处理:在连接符"."之前加上"?",这样就会进行判断,如果是null则计算中止,直接返回null。

   value="#{beanID.property?.toUpperCase()}" 

   value="#{beanID.getProperty()?.toUppserCase()}"

--static属性和方法

   使用T(fullClassName)来获取static属性/方法对应的类对象

   value="#{T(java.lang.Math).PI}"

   value="#{T(java.lang.Math).random()}"

 

2)数学、关系、逻辑运算

--数学运算:+,-,*,/,%,^

  value="#{person.age * 10}"

  测试时发现此时可能出现错误,如果person.age = 24.56,计算出的结果却为240.0

 

  同样也支持字符串+

  value="#{'Hello, ' + person.name}"

 

--关系运算:<,>,==,<=,>=,lt,gt,eq,le,ge

  value="#{person.age == 10}"

 

--逻辑运算:and, or, not, !

  value="#{person.age eq 10 and not person.male}"

 

--三元判断: ?:(...),?:(...) 

  value="#{person.age ge 18 ? 'adult':'minor'}"

 

3)正则表达式匹配:matches

  value="#{person.name matches 'huang.*'}"

 

4)操作集合

--获取集合中的某一元素

   value="#{list[index]}"

   value="#{map[key]}"

   注:SpEL内置了两个特殊的Properties对象SystemEnvironment和SystemProperties

   SystemEnvironment为OS环境变量

   SystemProperties为JVM启动参数(JVM启动时通过-Dxxx传入)

  

   [index]还可以用来获取String中的字符

 

--获取集合中的多个元素:过滤

   .?:所有符合条件的元素

   value="#{persons.?[age ge 18]}"

   .^:第一个符合条件的元素

   value="#{persons.^[age ge 18]}"

   .$:最后一个符合条件的元素

   value="#{persons.$[age ge 18]}"

 

--根据集合构建新集合

  .!

  新集合元素可以为原集合元素的属性,也可以为原集合某些元素的运算结果

  value="#{persons.![name]}"

  value="#{persons.![firstName + '.' + lastName]}"

 

3.使用须知

 

尽量少使用SpEL,除非真正需要

 

4.参考资料

 

Spring in Action 3rd(附件)

你可能感兴趣的:(language)