Spring spel表达式使用方法示例

 更新时间:2017年09月22日 15:05:29   作者:yangnianbing110  
这篇文章主要介绍了Spring spel表达式使用方法示例,通过一些实例向大家展示了spel表达式的用法,需要的朋友可以了解下。

spring in action第三版读书笔记

spring3.0引入了spring expression language(spel)语言,通过spel我们可以实现

1.通过bean的id对bean进行引用

2.调用方法以及引用对象中的属性

3.计算表达式的值

4.正则表达式的匹配

5.集合的操作

spel最终的目标是得到表达式计算之后的值,这些表达式可能是列举的一些值,引用对象的某些属性,或者是类中的某些常量,复杂的spel表达式通常都是由一些简单的元素构成的。最简单的仅仅是得到一些给出元素的值,例如:

<property name="count" value="the value is #{5}"/>。这种情况貌似很傻,根本就不需要用到spel,但是复杂的表达式都是由简单的构成的

对其他bean的引用

通过spel我们也可以对context中其他的bean进行引用

<property name="instrument" value="#{saxophone}"/> 

等同于

<property name="instrument" ref="saxophone"/> 

引用另外一个id为saxophone的bean作为instrument的值
对其他bean中某个属性的引用

<bean id="carl" class="com.springinaction.Instrumentalist"> 
<property name="song" value="#{kenny.song}"/> 
</bean> 

取id为kenny的bean的song字段的作为song的value
对其他bean中某个方法的引用

<property name="song" value="#{songSelector.selectSong().toUpperCase()}"/> 

调用id为songSelector的bean的selectSong()方法,使用其返回值作为song的值,这也带来一个问如果selectSong()方法返回一个null,那么会抛出一个空指针异常

<property name="song" value="#{songSelector.selectSong()?.toUpperCase()}"/>,表达式(?.)可以确保在selectSong()返回不为空的情况下调用toUpperCase()方法,如果返回空那么不继续调用后面的方法

对类进行引用

如果某个类是外部类,而不是spring中定义的bean,那么怎么进行引用呢?

使用表达式T(),例如:

<property name="randomNumber" value="#{T(java.lang.Math).random()}"/> 

spel计算表达式的值

spel表达式支持各种各样的运算符,我们可以可以运用这些运算符来计算表达式的值

使用spel从集合中筛选元素:

使用spring的util namespace中的元素<util:list>定义一个集合

<util:list id="cities">
<bean class="com.habuma.spel.cities.City"
p:name="Chicago" p:state="IL" p:population="2853114"/>
<bean class="com.habuma.spel.cities.City"
p:name="Atlanta" p:state="GA" p:population="537958"/>
<bean class="com.habuma.spel.cities.City"
p:name="Dallas" p:state="TX" p:population="1279910"/>
<bean class="com.habuma.spel.cities.City"
p:name="Houston" p:state="TX" p:population="2242193"/>
</util:list>

使用spel对集合进行筛选

<property name="chosenCity" value="#{cities[2]}"/>,

[]操作符也可以对Map进行筛选,假设citis是一个Map类型<property name="chosenCity" value="#{cities["keyName"]}"/>
[]对Properties类型进行操作

<util:properties id="settings"
location="classpath:settings.properties"/>使用<util:properties>标签读取一个properties文件

<property name="accessToken" value="#{settings['twitter.accessToken']}"/>
基于某个属性对集合中的元素进行过滤
<property name="bigCitis" value="#{cities.?[population gt 10000]}"/>选中人口大一10000的cities中的元素作为bigCitis的值,同操作符(.?[])类似, 操作符(.^[]选取满足要求的第一个元素, .$[]选取满足要求的最后一个)
选中已有集合中元素的某一个或几个属性作为新的集合
<property name="cityNames" value="#{cities.![name + ", " + state]}"/>

总结

以上就是本文关于Spring spel表达式使用方法示例的全部内容,希望对大家有所帮助。

相关文章

  • 优雅地在Java 8中处理异常的方法详解

    优雅地在Java 8中处理异常的方法详解

    异常处理是我们在日常开发中经常会遇到的一种需求,下面这篇文章主要给大家介绍了关于如何优雅地在Java 8中处理异常的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们来一起看看吧
    2019-01-01
  • SpringBoot响应出现中文乱码的解决方法

    SpringBoot响应出现中文乱码的解决方法

    这篇文章主要介绍了SpringBoot响应出现中文乱码的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作有一定的参考价值,需要的朋友们下面随着小编来一起来学习吧
    2024-02-02
  • dubbo新手学习之事件通知实践教程

    dubbo新手学习之事件通知实践教程

    这篇文章主要给大家介绍了关于dubbo新手学习之事件通知实践的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • log4j使用详细解析

    log4j使用详细解析

    Log4j 除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息。下面通过本文给大家介绍log4j使用详细解析,感兴趣的朋友一起看看吧
    2017-10-10
  • Spring boot连接MySQL 8.0可能出现的问题

    Spring boot连接MySQL 8.0可能出现的问题

    这篇文章主要给大家介绍了关于Spring boot连接MySQL 8.0可能出现的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • 深入了解Java核心类库--BigDecimal和System类

    深入了解Java核心类库--BigDecimal和System类

    这篇文章主要为大家详细介绍了javaBigDecimal和System类定义与使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-07-07
  • Java实现递归计算n的阶乘

    Java实现递归计算n的阶乘

    这篇文章主要为大家详细介绍了Java实现递归计算n的阶乘,利用递归的思想实现阶乘的计算,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • javaweb页面附件、图片下载及打开(实现方法)

    javaweb页面附件、图片下载及打开(实现方法)

    下面小编就为大家带来一篇javaweb页面附件、图片下载及打开(实现方法)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Spring boot 跳转到jsp页面的实现方法

    Spring boot 跳转到jsp页面的实现方法

    本篇文章主要介绍了Spring boot 跳转到jsp页面的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • SpringBoot 如何读取classpath下的文件

    SpringBoot 如何读取classpath下的文件

    这篇文章主要介绍了SpringBoot 读取classpath下的文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论