第五章、SpEL

第五章、SpEL

SpEL:Spring Expression Language, Spring 表达式语言

(一)SpEL特点

  1. SpEL是强大的表达式语言,
  2. 支持运行时查询、操纵一个对象图功能。
  3. SpEL语言的语法类似于EL,但提供了更多的功能,最主要的是显式方法调用和基本字符串模板函数
  4. SpEL是一个基于技术中立的API,允许需要时与其他表达式语言集成。
  5. SpEL与Spring不是直接绑定关系,它可以独立存在,并应用到其它平台

(二)SpEL支持如的功能:

  1. 基本表达式:字面量表达式、关系,逻辑与算数运算表达式、字符串连接及截取表达式、三目运算及Elivis表达式、正则表达式、括号优先级表达式;
  2. 类相关表达式:类类型表达式、类实例化、instanceof表达式、变量定义及引用、赋值表达式、自定义函数、对象属性存取及安全导航表达式、对象方法调用、Bean引用;
  3. 集合相关表达式:内联List、内联数组、集合,字典访问、列表,字典,数组修改、集合投影、集合选择;不支持多维内联数组初始化;不支持内联字典定义;
  4. 其他表达式:模板表达式。

(三)SpEL基本语法:

XML配置文件中使用 :#{表达式}

Bean注解中使用 :@Value("#{表达式 }")

引用其它对象的属性: #{对象名.属性}

(四)SpEL基本使用:

1.XML中使用 :

#{表达式}

<bean id="a" class="com.tjetc.domain.A">
		<property name="i" value="#{10^2}"></property>
</bean>
2.Bean注解中使用 :

@Value("#{表达式 }")

	@Value("#{10+2}")
	private int i;
3.引用其它对象的属性:

#{对象名.属性}

<bean id="a" class="com.tjetc.domain.A">
	 <property name="s" value="#{b.firstName}"></property>
</bean>

<bean id="b" class="com.tjetc.domain.B">
	 <property name="firstName" value=""></property>
	 <property name="lastName" value="无忌"></property>
</bean>
4.使用类的静态变量

#{T(类的全路径名).静态变量名}

<bean id="a" class="com.tjetc.domain.A">
	 <property name="d" value="#{T(java.lang.Math).PI}"></property>
</bean>
5.使用类的方法

#{T(类的全路径名).方法名(参数)}

<bean id="a" class="com.tjetc.domain.A">
	 <property name="d" value="#{T(java.lang.Math).max(3.1,12.3)}"></property>
</bean>
6.加号还可以用作字符串连接
<bean id="a" class="com.tjetc.domain.A">
	 <property name="s" value="#{b.firstName+'  '+b.lastName}"></property>
</bean>
7.使用类的非静态方法

#{bean的id.方法名(参数)}

<bean id="a" class="com.tjetc.domain.A">
	<property name="i" value="#{b.sum()}"></property>
</bean>
public int sum() {
		return 10+20;
}

(五)运算符:

1.算术运算符:
<!-- 3 -->
<property name="num" value="#{2+1}" />
<!-- 1 -->
<property name="num" value="#{2-1}" />
<!-- 4 -->
<property name="num" value="#{2*2}" />
<!-- 3 -->
<property name="num" value="#{9/3}" />
<!-- 1 -->
<property name="num" value="#{10%3}" />
<!-- 1000 -->
<property name="num" value="#{10^3}" />
2.字符串连接符:
<!-- 10年3个月 -->
<property name="numStr" value="#{10+''+3+'个月'}" />
3.比较运算符:
<!-- false -->
<property name="numBool" value="#{10&lt;0}" />
<!-- false -->
<property name="numBool" value="#{10 lt 0}" />
<!-- true -->
<property name="numBool" value="#{10&gt;0}" />
<!-- true -->
<property name="numBool" value="#{10 gt 0}" />
<!-- true -->
<property name="numBool" value="#{10==10}" />
<!-- true -->
<property name="numBool" value="#{10 eq 10}" />
<!-- false -->
<property name="numBool" value="#{10&lt;=0}" />
<!-- false -->
<property name="numBool" value="#{10 le 0}" />
<!-- true -->
<property name="numBool" value="#{10&gt;=0}" />
<!-- true -->
<property name="numBool" value="#{10 ge 0}" />
4.逻辑运算符:
<!-- false -->
<property name="numBool" value="#{true and false}" />
<!-- false -->
<property name="numBool" value="#{true&amp;&amp;false}" />
<!-- true -->
<property name="numBool" value="#{true or false}" />
<!-- true -->
<property name="numBool" value="#{true||false}" />
<!-- false -->
<property name="numBool" value="#{not true}" />
<!-- false -->
<property name="numBool" value="#{!true}" />
5.三目运算符:
<!-- 真 -->
<property name="numStr" value="#{(10>3)?'':''}" />
6.正则表达式:matches
<!-- true -->
<property name="numBool" value="#{user.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}'}" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值