zoukankan      html  css  js  c++  java
  • spring: 在表达式中使用类型

    如果要在SpEL中访问类作用域的方法和常量的话,要依赖T()这个关键的运算符。例如,为了在SpEL中表达Java的Math类,需要按照如下的方式使用T()运算符:

    T{java.lang.Math}

    这里所示的T()运算符的结果会是一个Class对象,代表了java.lang.Math。如果需要的话,我们甚至可以将其装配到一个Class类型的bean属性中。但是T()运算符的真正价值在于它能够访问目标类型的静态方法和常量。

    例如,假如你需要将PI值装配到bean属性中。如下的SpEL就能完成该任务:

    T{java.lang.Math}.random()

    SpEL还提供了三元运算符(ternary),它与Java中的三元运算符非常类似。例如,如下的表达式会判断如果scoreboard.score>1000的话,计算结果为String类型的“Winner!”,否则的话,结果为Loser:

    #{scoreboard.score > 100  ? "Winner" : "Loser}

    三元运算符的一个常见场景就是检查null值,并用一个默认值来替代null。例如,如下的表达式会判断disc.title的值是不是null,如果是null的话,那么表达式的计算结果就会是“Rattleand Hum”:

    #{disc.title ? "Rattleand hum"}

    SpEL还提供了查询运算符(.?[]),它会用来对集合进行过滤,得到集合的一个子集。作为阐述的样例,假设你希望得到jukebox中artist属性为Aerosmith的所有歌曲。如下的表达式就使用查询运算符得到了Aerosmith的所有歌曲:

    #{jukebox.songs.?[artist eq 'Aerosmith' ]}

    SpEL还提供了另外两个查询运算符:“.^[]”和“.$[]”,它们分别用来在集合中查询第一个匹配项和最后一个匹配项。例如,考虑下面的表达式,它会查找列表中第一个artist属性为Aerosmith的歌曲:

    #{jukebox.songs.^[artist eq 'Aerosmith' ]}

    最后,SpEL还提供了投影运算符(.![]),它会从集合的每个成员中选择特定的属性放到另外一个集合中。作为样例,假设我们不想要歌曲对象的集合,而是所有歌曲名称的集合。如下的表达式会将title属性投影到一个新的String类型的集合中:

    #{jukebox.songs.![title]}

    实际上,投影操作可以与其他任意的SpEL运算符一起使用。比如,我们可以使用如下的表达式获得Aerosmith所有歌曲的名称列表:

    #{jukebox.songs.?[artist eq 'Aerosmith' ].![title]}

    注意点:

    (1)查询集合有三种符号

    .?[ ] 返回一个集合

    .^[ ]返回集合的第一个对象

    .$[ ]返回集合的最后一个对象

    (2)影射元素集合符号

    .![ ] 返回一个集合

    (3)在查询元素的时候,我们可以引入对比符来对比某种属性,例如:cakes.$[size > 6]

    (4)影射元素集合的时候,中括号里面放入的是集合里面某个元素的某个属性,返回的就是集合里面所有元素的这个属性的集合

  • 相关阅读:
    Source Insight技巧收集
    宝贝,祝你生日快乐!
    【转载】C++中的extern C
    Meego
    source insight增加新类型方法
    点操作符和箭头操作符的异同
    【转载】mtk编译命令
    margin和padding的用法与区别以及bug处理方式
    js数组
    随机验证码,颜色同时刷新
  • 原文地址:https://www.cnblogs.com/achengmu/p/8304165.html
Copyright © 2011-2022 走看看