【Spring4.0笔记整理八】SpEL

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/80273676

  说起 SpEL,有过 jsp+servlet 基础的童鞋一定会联想到 EL表达式。没错!它是 Spring 中的EL表达式语言,语法也类似 EL表达式,使用 #{…} 作为定界符,所有在大括号中的字符都将被认为是 SpEL。
  
  它存在的意义是: 为 bean 的属性进行动态赋值提供了便利。

  通过 SpEL 可以实现:
    1)通过 bean 的 id 对 bean 进行引用
    2)调用方法以及引用对象中的属性
    3)计算表达式的值
    4)正则表达式的匹配


今天我们主要来讲一下它的四种用法:

  一、字面量赋值

  二、引用Bean、属性和方法(必须是public修饰的)

  三、运算符

  四、调用静态方法或静态属性





一、字面量赋值

<!-- 整数 -->
<property name="count" value="#{5}" />
<!-- 小数 -->
<property name="frequency" value="#{13.2}" />
<!-- 科学计数法 -->
<property name="capacity" value="#{1e4}" />
<!-- 字符串  #{"字符串"} 或  #{'字符串'} -->
<property name="name" value="#{'我是字符串'}" />
<!-- Boolean -->
<property name="enabled" value="#{false}" />

注: 1)字面量赋值必须要和对应的属性类型兼容,否则会报异常。

   2)一般情况下我们不会使用 SpEL字面量赋值,因为我们可以直接赋值。


二、引用Bean、属性和方法(必须是public修饰的)

<!-- 引用其他对象 -->
<property name="car" value="#{car}" />
<!-- 引用其他对象的属性 -->
<property name="carName" value="#{car.name}" />
<!-- 引用其他对象的方法 -->
<property name="carPrint" value="#{car.print()}" />


三、运算符

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

<!-- 3 -->
<property name="num" value="#{2+1}" />
<!-- 1 -->
<property name="num" value="#{2-1}" />
<!-- 4 -->
<property name="num" value="#{2*2}" />
<!-- 3 -->
<property name="num" value="#{9/3}" />
<!-- 1 -->
<property name="num" value="#{10%3}" />
<!-- 1000 -->
<property name="num" value="#{10^3}" />

2、字符串连接符:+

<!-- 10年3个月 -->
<property name="numStr" value="#{10+'年'+3+'个月'}" />

3、比较运算符:<(&lt;),>(&gt;),==,<=,>=,lt,gt,eq,le,ge

<!-- false -->
<property name="numBool" value="#{10&lt;0}" />
<!-- false -->
<property name="numBool" value="#{10 lt 0}" />
<!-- true -->
<property name="numBool" value="#{10&gt;0}" />
<!-- true -->
<property name="numBool" value="#{10 gt 0}" />
<!-- true -->
<property name="numBool" value="#{10==10}" />
<!-- true -->
<property name="numBool" value="#{10 eq 10}" />
<!-- false -->
<property name="numBool" value="#{10&lt;=0}" />
<!-- false -->
<property name="numBool" value="#{10 le 0}" />
<!-- true -->
<property name="numBool" value="#{10&gt;=0}" />
<!-- true -->
<property name="numBool" value="#{10 ge 0}" />

4、逻辑运算符:and,or,not,&&(&amp;&amp;),||,!

<!-- false -->
<property name="numBool" value="#{true and false}" />
<!-- false -->
<property name="numBool" value="#{true&amp;&amp;false}" />
<!-- true -->
<property name="numBool" value="#{true or false}" />
<!-- true -->
<property name="numBool" value="#{true||false}" />
<!-- false -->
<property name="numBool" value="#{not true}" />
<!-- false -->
<property name="numBool" value="#{!true}" />

5、条件运算符:?true:false

<!-- 真 -->
<property name="numStr" value="#{(10>3)?'真':'假'}" />

6、正则表达式:matches

<!-- true -->
<property name="numBool" value="#{user.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}'}" />


四、调用静态方法或静态属性

  通过 T() 调用一个类的静态方法,它将返回一个 Class Object,然后再调用相应的方法或属性:

<!-- 3.141592653589793 -->
<property name="PI" value="#{T(java.lang.Math).PI}" />




猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/80273676