sple表达式_教自己学习SpEL表达式

各位看官可以关注博主个人博客,了解更多信息。

作者:Surpasser

链接地址:https://surpass.org.cn

image

Spring 3.0 创建了一种新的方式用以配置对象的注入(set 注入或者构造参数注入),它便是 SpEL (Spring Expression Language)下面我们一一做一介绍。

基础特性

SpEL 使用#{…}作为定界符,所有在大框号中的字符都将被认为是 SpEL.

1、 自变量的表示

1、整数

2、小数

3、科学计数法

4、String 可以使用单引号或者双引号作为字符串的定界符号。

5、Boolean

2、 引用 Bean,属性和方法

1、引用其他对象

​ 通过id:“saxophone”将对象注入到instrument 属性中,这与下面的配置是一样的:

2、引用其他对象的属性

​ kenny 是Bean Id 而 song 是属性的名字,这样配置就如同我们写了如下的代码

Instrumentalist carl = new Instrumentalist();

carl.setSong(kenny.getSong());

3、调用其他方法

​ 调用了 BeanId 为“songSelector”的对象的selectSong()方法,并将返回值注入到 song 属性

​ 中。或者还可以链式操作。如下:

​ 如果 songSelector.selectSong()返回 null 的还会抛出异常,为了避免我们要使用?.表达式。

​ 这样如果 songSelector.selectSong()为null 就不会再调用后面的方法了。如下

4、调用静态方法

我们已经知道如何通过一个对象调用它的方法了,但是如何调用一个静态方法呢?用T()。它将返回一个 Class object

然后我们再调用相应的方法即可:

3、SpEL 支持的运算符号

1、算数运算符:+, -, *, /, %, ^

​ 加号还可以用作字符串连接

2、比较运算符: , ==, <=, >=, lt, gt, eq, le, ge

​ 不可以使用号,应为在 xml 中它有特殊的含义,我们使用 lt 和 gt 代替

3、 逻辑运算符号: and, or, not, |

4、 If-else 运算符:?: (ternary), ?: (Elvis)

​ 〇最基本的 ?:(这如同我们在使用EL 表达式语言):

​ 〇变体的 ?:

​ 上下两种是同一语义,但下面的明显简洁

5、 正则表达式:matches

​ 表达式返回逻辑值,如果匹配返回 true,否则返回false

4、SpEL 对集合的支持

环境

​ 有实体 City 定义如下:

package com.habuma.spel.cities;

public class City {

private String name;

private String state;

private int population;

}

​ Xml 中有如下定义

1、 获取 Collection 中的某个对象〇通过下标访问,如下:

​ 我们就会获得 population 为"1279910"的city(记住下标从 0 开始) 〇下标可以通过变量指定,如下:

​ 〇如果是从 Map 中获得,可指定 key 值,如下

​ 〇也可以通过 key 访问 properties 的值,如下

​ 〇可以通过下标访问 systemEnvironment 和 SystemProperties 中的值

​ 〇如果在 jre 运行时配置了-Dapplication.home=/etc/myapp,我们可以通过如下方式访问

​ 〇通过下标获取 String 串中的某个字符

This is a test'[3]

2、获取 Collection 中的子集-通过条件筛选(注意新对象是一个新的 Collection)

1、筛选子集(.?[])

2、获取第一个(.^[])

3、获取最后一个(.$[])

3、集合的投影(.![])

如果想获得所有城市的名称组成的列表,可用如下操作

​ 将返回"Chicago", "Atlanta", "Dallas"

​ 也可以组合两个列,如下:

​ 将返回"Chicago, IL", "Atlanta, GA", and "Dallas, TX".

4、将投影和筛选结合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值