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.sql.SQLException:com.mysql.cj.jdbc.Driver报错问题解决

    java.sql.SQLException:com.mysql.cj.jdbc.Driver报错问题解决

    这篇文章主要给大家介绍了关于java.sql.SQLException:com.mysql.cj.jdbc.Driver报错问题解决的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • Java8的Lambda遍历两个List匹配数据方式

    Java8的Lambda遍历两个List匹配数据方式

    这篇文章主要介绍了Java8的Lambda遍历两个List匹配数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 使用Java编写导出不确定行数列数数据的工具类

    使用Java编写导出不确定行数列数数据的工具类

    这篇文章主要为大家详细介绍了如何使用Java编写导出不确定行数列数数据的工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • 浅谈JAVA Actor模型的一致性与隔离性

    浅谈JAVA Actor模型的一致性与隔离性

    这篇文章主要介绍了JAVA Actor模型的的相关资料,文中讲解非常细致,帮助大家更好的学习JAVA,感兴趣的朋友可以了解下
    2020-06-06
  • java中判断字段真实长度的实例(中文2个字符,英文1个字符)

    java中判断字段真实长度的实例(中文2个字符,英文1个字符)

    下面小编就为大家带来一篇java中判断字段真实长度的实例(中文2个字符,英文1个字符)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • java 三元操作符用法说明

    java 三元操作符用法说明

    这篇文章主要介绍了java 三元操作符用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • java String校招面试题过程详解

    java String校招面试题过程详解

    这篇文章主要介绍了java String校招面试题过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java实现视频时间维度剪切的工具类

    Java实现视频时间维度剪切的工具类

    这篇文章主要为大家详细介绍了将视频按照时间维度进行剪切的Java工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • SpringBoot全局Controller返回值格式统一

    SpringBoot全局Controller返回值格式统一

    本文主要介绍了SpringBoot全局Controller返回值格式统一,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 基于Java ActiveMQ的实例讲解

    基于Java ActiveMQ的实例讲解

    下面小编就为大家带来一篇基于Java ActiveMQ的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09

最新评论