Spring SpEL

参考:https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/expressions.html

1. 什么是SpEL

The Spring Expression Language (SpEL for short) is a powerful expression language that supports querying and manipulating an object graph at runtime

SpEL是一种表达式语言,支持在运行时查询、操作对象图。这里不太理解对象图是什么意思,简单来讲说SpEL可以操作各种对象的数据和方法吧

和JSP页面上的EL表达式、Struts2中用到的OGNL表达式一样,SpEL根据JavaBean风格的getXxx()、setXxx()方法定义的属性访问对象图,完全符合我们熟悉的操作习惯

基本语法:SpEL使用#{…}作为定界符,所有在大框号中的字符都将被认为是SpEL表达式

2. 功能概览

英文 中文
Literal expressions 字面值表达式
Boolean and relational operators 布尔和关系操作符
Regular expressions 正则表达式
Class expressions 类表达式
Accessing properties, arrays, lists, maps 访问properties、arrays、lists、maps
Method invocation 方法调用
Relational operators 关系操作符
Assignment 赋值
Calling constructors 调用构造器
Bean references bean引用
Array construction 构建数组
Inline lists 内联lists
Inline maps 内联maps
Ternary operator 三元操作符
Variables 变量
User defined functions 用户定义的功能
Collection projection 集合投影
Collection selection 集合选择
Templated expressions 模板化表达式

运算符

  • 算术运算符:+、-、*、/、%、^
  • 字符串连接:+
  • 比较运算符:<、>、==、<=、>=、lt、gt、eq、le、ge
  • 逻辑运算符:and, or, not, |
  • 三目运算符:判断条件?判断结果为true时的取值:判断结果为false时的取值
  • 正则表达式:matches

3. 字面值表达式

整数

1
<property name="count" value="#{5}"/>

浮点数

1
<property name="point" value="#{89.7}"/>

科学计数法

1
<property name="capacity" value="#{1e4}"/>

字符串,可以用单引号或者双引号作为定界符号

1
2
<property name=“name” value="#{'Chuck'}"/>
<property name='name' value='#{"Chuck"}'/>

布尔

1
2
<property name="enabled" value="#{false}"/>
<property name="enabled" value="#{true}"/>

4. 引用Bean组件

4.1. 引用其它Bean组件

1
2
3
4
5
6
7
8
9
<bean id="car" class="bean.Car">
<property name="name" value="haha"/>
</bean>
<bean id="person" class="bean.Person">
<!-- SpEL 引用Bean -->
<property name="car" value="#{car}"/>
<!-- ref 引用Bean,两种方式效果一样 -->
<property name="car" ref="car"/>
</bean>

4.2. 引用其它Bean组件的属性

1
2
3
4
5
6
<bean id="car" class="bean.Car">
<property name="name" value="haha"/>
</bean>
<bean id="person" class="bean.Person">
<property name="name" value="#{car.name}"/>
</bean

4.3. 调用其它Bean组件的方法

1
2
3
4
5
6
<bean id="car" class="bean.Car">
<property name="name" value="haha"/>
</bean>
<bean id="person" class="bean.Person">
<property name="name" value="#{car.getName()}"/>
</bean>

5. 调用静态方法

语法:#{T(类全名).静态方法()}

1
2
3
4
<bean id="person" class="bean.Person">
<property name="name" value="#{T(java.util.UUID).randomUUID().toString().substring(0, 10)}"/>
<property name="age" value="#{T(java.lang.Math).PI*20}"/>
</bean>
panchaoxin wechat
关注我的公众号
支持一下