sple表达式_Spring实战学习笔记之SpEL表达式

在Spring XML配置文件中装配Bean的属性和构造参数都是静态的,而在运行期才知道装配的值,就可以使用SpEL实现

SpEL表达式的首要目标是通过计算获得某个值。在计算这个数值的过程中,会使用到其他的值并会对这些值进行操作。

SpEL特性:(1)、使用Bean的ID来引用Bean;(2)、调用方法和访问对象的属性;(3)、对值进行算术、关系和逻辑运算;(4)、正则表达式匹配;(5)、集合操作

#{ }标记会提示 Spring这个标记里的内容是SpEL表达式。

最简单的属性注入:

还可以与非SpEL表达式的值混用:

浮点数value="#{89.7}"        科学记数法value="#{1e4}"=====>10000.0

String类型的字面值:或    单引号和双引号相互包含的方式使用

布尔类型:

引用Bean:等价于

引用Bean属性:类似代码:User user=new User();order.setOrderOwner(user.getName());

引用Bean的方法:(假设userDao内有公共方法getCurrUser())

现在如果想把userDao.getCurrUser()得到的当前英文用户名转为大写字母:,这时如果得到的用户名为空(null),则会抛NullPointerException异常,为了避免异常,可以使用?.代替点(.),如:这样null后面的方法不再执行

SpEL表达式中使用T( )运算符访问指定类的静态方法和常量。

如引用Math类的PI常量:

如调用Math类的random静态方法:

使用SpEL进行数值运算:

加法:(把counter Bean的total属性值与42相加,注意+运算符两边必须是数字型)

其他减、乘、整除、求余运算符类似。

使用SpEL进行比较和逻辑表达式运算时,会将得到的布尔型(true或false)赋值给属性,注意,比较运算符的、>=这些符号含有,在XML中有特殊意义,故使用中需要用文本替代方式。==对应eq、对应gt、>=对应ge

比较运算符:

逻辑表达式(and 、or 、not或!):

条件表达式(使用三元运算符? : ):

上述条件表达式中kenny.song有重复,可以简化写:

正则表达式:

在SpEL中筛选集合

假设有个City类,属性有name、state、population

在Spring XML中引入util命名空间,定义一个集合

访问集合成员: 选出集合中第三个City

结合SpEL表达式其他方法

[]运算符也可以获取java.util.Map集合中成员,假设City是Map集合:

从java.util.Properties集合中取值,通过元素加载properties配置文件,假设文件有内容twitter.accessToken=aadkeudnfsje233sdjfs。获取方式:

Spring还为SpEL创造了两种特殊的选择属性方式:systemEnvironment和systemProperties

systemEnvironment包含了应用程序所在机器上的所有环境变量(其实是一个java.util.Properties集合),如获取JAVA_HOME路径:

systemProperties包含了java应用程序启动时所设置的所有属性(通常通用-D参数)。因此。如果使用-Dapplication.home=/etc/myapp,来启动JVM,那么通过SpEL获取:

使用SpEL获取字符串某字符:'This is a test'[3]

查询集合成员:

得到人口大于100000的城市集合

得到人口大于100000的第一个符合条件的大城市

得到人口大于100000的最后一个符合条件的大城市

投影集合:从集合中选取每个成员的属性放入一个新的集合中,使用.![]运算符

得到城市的名字并赋予String类型集合

属性拼接,得到如"Chicago,IL"、"Atlanta,GA"、等数据集合

注意:在传统方式难以实现的情况下可以考虑使用SpEL,不要把过多逻辑放入SpEL表达式中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值